diff --git a/lib.py b/lib.py index b61f55a..7c99e0c 100644 --- a/lib.py +++ b/lib.py @@ -49,11 +49,17 @@ def execute(program): else: return ("identifier", item) if type(ctx) == type([]) and ctx[0][0] == "identifier": - subs = list( - map(lambda a: _execute(a), ctx) - ) - _fixarr(subs) #print("abba", ctx, subs) + + + if ctx[0] == _ident("defun"): + funcspace[ctx[1]] = ctx[2] + return funcspace[ctx[1]] + elif ctx[0] == _ident("cond"): + return _execute(ctx[2]) if _truthy(_execute(ctx[1])) else _execute(ctx[3]) + + subs = _fixarr(list(map(lambda a: _execute(a), ctx))) + if ctx[0][1][0] == "$": return subs elif ctx[0][1] == "id": @@ -65,6 +71,8 @@ def execute(program): return idspace[subs[1]] elif ctx[0] == _ident("+"): 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", 1.0 if subs[1] == subs[2] else 0.0) elif ctx[0] == _ident("="): @@ -73,12 +81,8 @@ def execute(program): return ("number", 1.0 if subs[1][1] > subs[2][1] else 0.0) elif ctx[0] == _ident("<"): return ("number", 1.0 if subs[1][1] < subs[2][1] else 0.0) - elif ctx[0] == _ident("defun"): - funcspace[subs[1]] = subs[2] - return funcspace[subs[1]] - elif ctx[0] == _ident("cond"): - return _execute(subs[2]) if _truthy(_execute(subs[1])) else _execute(subs[3]) elif ctx[0] == _ident("conv"): + print(subs) return (subs[1][1], float(subs[2][1]) if subs[1][1] == "number" else str(subs[2][1])) elif ctx[0] == _ident("all"): ret = _execute(subs[1]) diff --git a/lib/aids.klambda b/lib/aids.klambda index a42514b..be7097a 100644 --- a/lib/aids.klambda +++ b/lib/aids.klambda @@ -2,14 +2,14 @@ : i'm hilarious. (defun spit - (id miracle + (miracle "builtins" "print" (id $1)) ) (defun input - (id miracle + (miracle "builtins" "input" ("")) ) (defun thesis - (id spit + (spit ("this language belongs to makise kurisu. there are many like it, but this one is hers.")) ) \ No newline at end of file diff --git a/test.klambda b/test.klambda index 597d285..cd07566 100644 --- a/test.klambda +++ b/test.klambda @@ -15,18 +15,18 @@ INCLUDE:./lib/aids.klambda (spit ( (cond (> age 18) - "adult" - "not adult" + "adult (hag)" + "not adult (uoh)" ) ) ) (defun loop - (id all - (id id spit ($1)) - (id id cond (id id id = $1 $2) + (all + (spit ($1)) + (cond (= $1 $2) $1 - (id id id loop (id id id id + $1 1) $2) + (loop (+ $1 1) $2) ) ) )