diff --git a/operator-assign.go b/operator-assign.go index 86bcc58..6e077c1 100644 --- a/operator-assign.go +++ b/operator-assign.go @@ -76,14 +76,18 @@ func evalAssign(ctx ExprContext, opTerm *term) (v any, err error) { if v, err = rightChild.compute(ctx); err == nil { if functor, ok := v.(Functor); ok { - if info := functor.GetFunc(); info != nil { - ctx.RegisterFunc(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params()) - } else if funcDef, ok := functor.(*exprFunctor); ok { - paramSpecs := ForAll(funcDef.params, func(p ExprFuncParam) ExprFuncParam { return p }) + if leftSym == SymVariable { + if info := functor.GetFunc(); info != nil { + ctx.RegisterFunc(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params()) + } else if funcDef, ok := functor.(*exprFunctor); ok { + paramSpecs := ForAll(funcDef.params, func(p ExprFuncParam) ExprFuncParam { return p }) - ctx.RegisterFunc(leftTerm.source(), functor, TypeAny, paramSpecs) + ctx.RegisterFunc(leftTerm.source(), functor, TypeAny, paramSpecs) + } else { + err = opTerm.Errorf("unknown function %s()", rightChild.source()) + } } else { - err = opTerm.Errorf("unknown function %s()", rightChild.source()) + err = assignValue(ctx, leftTerm, v) } } else { err = assignValue(ctx, leftTerm, v)