shell: more foundations from Lisp
This commit is contained in:
parent
f79ae9ea54
commit
9fd3111ea9
|
@ -9,6 +9,11 @@
|
||||||
`((fn (,var) ,@body) ,val))])
|
`((fn (,var) ,@body) ,val))])
|
||||||
(when . [(mac (when cond . body)
|
(when . [(mac (when cond . body)
|
||||||
`(if ,cond (do ,@body) ()))])
|
`(if ,cond (do ,@body) ()))])
|
||||||
|
(iflet . [(mac (iflet var expr then else)
|
||||||
|
`(let ,var ,expr
|
||||||
|
(if ,var ,then ,else)))])
|
||||||
|
(aif . [(mac (aif expr then else)
|
||||||
|
`(iflet it ,expr ,then ,else))])
|
||||||
(list . [(def (list . args)
|
(list . [(def (list . args)
|
||||||
# we should probably make a copy here
|
# we should probably make a copy here
|
||||||
args)])
|
args)])
|
||||||
|
@ -21,6 +26,45 @@
|
||||||
()
|
()
|
||||||
(cons (f (car xs))
|
(cons (f (car xs))
|
||||||
(map1 f (cdr xs)))))])
|
(map1 f (cdr xs)))))])
|
||||||
|
(compose . [(def (compose f g)
|
||||||
|
(fn args
|
||||||
|
(f (g args))))])
|
||||||
|
(some . [(def (some f xs)
|
||||||
|
(if (no xs)
|
||||||
|
()
|
||||||
|
(if (f (car xs))
|
||||||
|
xs
|
||||||
|
(some f (cdr xs)))))])
|
||||||
|
(any . some)
|
||||||
|
(all . [(def (all f xs)
|
||||||
|
(if (no xs)
|
||||||
|
1
|
||||||
|
(if (f (car xs))
|
||||||
|
(all f (cdr xs))
|
||||||
|
())))])
|
||||||
|
(find . [(def (find x xs)
|
||||||
|
(if (no xs)
|
||||||
|
()
|
||||||
|
(if (= x (car xs))
|
||||||
|
1
|
||||||
|
(find x (cdr xs)))))])
|
||||||
|
(afn . [(mac (afn params . body)
|
||||||
|
`(let self ()
|
||||||
|
(set self (fn ,params ,@body))))])
|
||||||
|
(rem . [(def (rem f xs)
|
||||||
|
(if (no xs)
|
||||||
|
()
|
||||||
|
(let rest (rem f (cdr xs))
|
||||||
|
(if (f (car xs))
|
||||||
|
rest
|
||||||
|
(cons (car xs) rest)))))])
|
||||||
|
(keep . [(def (keep f xs)
|
||||||
|
(if (no xs)
|
||||||
|
()
|
||||||
|
(let rest (keep f (cdr xs))
|
||||||
|
(if (f (car xs))
|
||||||
|
(cons (car xs) rest)
|
||||||
|
rest))))])
|
||||||
(++ . [(mac (++ var) `(set ,var (+ ,var 1)))])
|
(++ . [(mac (++ var) `(set ,var (+ ,var 1)))])
|
||||||
(+= . [(mac (+= var inc)
|
(+= . [(mac (+= var inc)
|
||||||
`(set ,var (+ ,var ,inc)))])
|
`(set ,var (+ ,var ,inc)))])
|
||||||
|
|
Loading…
Reference in New Issue