diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-12 20:09:05 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-12 20:09:05 +0000 |
commit | 55ca6248ffff6d9e1669fc49fe9de8489adeb7f9 (patch) | |
tree | 1bd23b6c91cb0c792ac1072cfe005cf2f5581551 /eval.c | |
parent | d152639e4495089cabbbf7a16e5bc5129af78bfa (diff) |
Add dfn evaluation, and localized ⎕IO
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) |