diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -150,10 +150,25 @@ monadfun(Datum left, Datum right) traceprint("Monadic function application\n"); Datum result; result.tag = ArrayTag; + result.shy = 0; if(left.func.type == FunctypeDfn){ - print("Can't evaluate dfns yet: %S %S\n", ppdatum(left), ppdatum(right)); - exits(nil); + Symtab *tmpsymtab = currentsymtab; + currentsymtab = newsymtab(); + if(left.func.left){ + Symbol *alpha = getsym(currentsymtab, L"⍺"); + alpha->value.tag = ArrayTag; + alpha->value.array = left.func.left; + alpha->undefined = 0; + } + + Symbol *omega = getsym(currentsymtab, L"⍵"); + omega->value = right; + omega->undefined = 0; + + Datum *dfnres = evalline(left.func.dfn); + currentsymtab = tmpsymtab; + return *dfnres; /* TODO what if the evaluation failed */ }else{ /* TODO handle undefined functions here */ if(left.func.left) |