Compare commits

...

4 Commits

  1. 13
      lib.py
  2. 7
      lib/booleans.klambda
  3. 6
      lib/loop.klambda

@ -4,6 +4,7 @@
def execute(program):
import traceback, copy
from functools import reduce
def _execute(ctx, ids):
import sys, functools
lids = copy.copy(ids)
@ -70,17 +71,15 @@ def execute(program):
ids[ctx[1]] = subs[2]
return ids[ctx[1]]
elif ctx[0] == _ident("+"):
return (subs[1][0], subs[1][1]+subs[2][1])
return reduce(lambda a, b: (a[0], a[1]+b[1]), subs[1:])
elif ctx[0] == _ident("-"):
return (subs[1][0], subs[1][1]-subs[2][1])
return reduce(lambda a, b: (a[0], a[1]-b[1]), subs[1:])
elif ctx[0] == _ident("*"):
return (subs[1][0], subs[1][1]*subs[2][1])
return reduce(lambda a, b: (a[0], a[1]*b[1]), subs[1:])
elif ctx[0] == _ident("/"):
return (subs[1][0], subs[1][1]/subs[2][1])
return reduce(lambda a, b: (a[0], a[1]/b[1]), subs[1:])
elif ctx[0] == _ident("%"):
return (subs[1][0], subs[1][1]%subs[2][1])
elif ctx[0] == _ident("!"):
return ("number", 0.0 if _truthy(subs[1]) else 1.0)
elif ctx[0] == _ident("=="):
return ("number", 1.0 if subs[1] == subs[2] else 0.0)
elif ctx[0] == _ident("="):
@ -123,7 +122,7 @@ def execute(program):
try: _execute(strand, idspace)
# _execute(strand)
except Exception as e:
print("failed in", strand, "with", e)
print("failed in top-level", strand, "with", e)
_execute(strand, idspace)
#input()

@ -1,2 +1,7 @@
(def true 1)
(def false 1)
(def false 0)
(def ! (lambda (val)
(cond (val)
0
1)))

@ -1,9 +1,9 @@
(def loop (lambda (max i statement)
(def loop (lambda (min i statement)
(all
statement
(cond (= i max)
(cond (= i min)
false
(loop max (- i 1) (id statement))))))
(loop min (- i 1) (id statement))))))
(def each
(lambda (it action)

Loading…
Cancel
Save