Compare commits

..

No commits in common. '9c0ba1801aa21d76f2daec4fb42649ebb5e654a4' and '6376c01d37495000ecba580eb9260fe7d65ece28' have entirely different histories.

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

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

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

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

Loading…
Cancel
Save