From 2ae465815182a45b640d52672efa6919da053e44 Mon Sep 17 00:00:00 2001 From: cynic Date: Tue, 4 Oct 2022 19:48:21 -0400 Subject: [PATCH] list operations --- lib.py | 32 ++++++++++++-------------------- lib/loop.klambda | 9 +++------ test.klambda | 3 +++ 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/lib.py b/lib.py index 1a18502..015bb2a 100644 --- a/lib.py +++ b/lib.py @@ -71,8 +71,16 @@ 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 (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 (subs[1][0], subs[1][1]%subs[2][1]) + elif ctx[0] == _ident("!"): + return ("number", 0.0 if 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("="): @@ -88,6 +96,10 @@ def execute(program): for statement in subs[2:]: ret = _execute(statement) return ret + elif ctx[0] == _ident("at"): + return subs[2][int(subs[1][1])] + elif ctx[0] == _ident("length"): + return _box(len(subs[1])) elif ctx[0] in funcspace: #print(subs) prototype = funcspace[ctx[0]] @@ -116,23 +128,3 @@ def execute(program): _execute(strand) #input() - -def oldexecute(ctx): - import sys - def _ident(name): - return ("identifier", name) - def _destr(t): - return t[1] if t[0] == "string" else "" - def _fixarr(a): - for i in a: - if i[0] == "identifier": - a[a.index(i)] = idspace[i] - return a - - - if ctx[0] == _ident("miracle"): - getattr(sys.modules[_destr(ctx[1])], _destr(ctx[2]))(*[i[1] for i in _fixarr(ctx[3])]) - elif ctx[0] == _ident("def"): - idspace[ctx[1]] = ctx[2] - elif ctx[0] == _ident("eval"): - execute(ctx[1]) \ No newline at end of file diff --git a/lib/loop.klambda b/lib/loop.klambda index 84770f4..37a012f 100644 --- a/lib/loop.klambda +++ b/lib/loop.klambda @@ -1,11 +1,8 @@ DEFINE:loop:(defun loop\ (all\ statement\ - (cond (= $1 $2)\ + (cond (= $1 (- $2 1))\ $1\ - (loop (+ $1 1) $2)\ - )\ - )\ -)\ + (loop (+ $1 1) $2))))\ (loop start end)\ -:start:end:statement \ No newline at end of file +:start:end:statement diff --git a/test.klambda b/test.klambda index fbf6886..f6dc97d 100644 --- a/test.klambda +++ b/test.klambda @@ -17,4 +17,7 @@ INCLUDE:./lib/aids.klambda loop:0:100:(spit (cond (% $1 15) (cond (% $1 5) (cond (% $1 3) $1 "fizz") "buzz") "fizzbuzz")) +(def moeblob ("moe" "moe~" "kyun!!")) +:loop:0:(length moeblob):(spit (at $1 moeblob)) + (thesis) \ No newline at end of file