list operations

master
cynic 3 years ago
parent 0565c0b9a4
commit 2ae4658151
  1. 32
      lib.py
  2. 7
      lib/loop.klambda
  3. 3
      test.klambda

@ -71,8 +71,16 @@ def execute(program):
return idspace[subs[1]] return idspace[subs[1]]
elif ctx[0] == _ident("+"): elif ctx[0] == _ident("+"):
return (subs[1][0], subs[1][1]+subs[2][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 (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("%"): elif ctx[0] == _ident("%"):
return (subs[1][0], subs[1][1]%subs[2][1]) 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("=="): elif ctx[0] == _ident("=="):
return ("number", 1.0 if subs[1] == subs[2] else 0.0) return ("number", 1.0 if subs[1] == subs[2] else 0.0)
elif ctx[0] == _ident("="): elif ctx[0] == _ident("="):
@ -88,6 +96,10 @@ def execute(program):
for statement in subs[2:]: for statement in subs[2:]:
ret = _execute(statement) ret = _execute(statement)
return ret 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: elif ctx[0] in funcspace:
#print(subs) #print(subs)
prototype = funcspace[ctx[0]] prototype = funcspace[ctx[0]]
@ -116,23 +128,3 @@ def execute(program):
_execute(strand) _execute(strand)
#input() #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])

@ -1,11 +1,8 @@
DEFINE:loop:(defun loop\ DEFINE:loop:(defun loop\
(all\ (all\
statement\ statement\
(cond (= $1 $2)\ (cond (= $1 (- $2 1))\
$1\ $1\
(loop (+ $1 1) $2)\ (loop (+ $1 1) $2))))\
)\
)\
)\
(loop start end)\ (loop start end)\
:start:end:statement :start:end:statement

@ -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")) 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) (thesis)
Loading…
Cancel
Save