JavaScriptで作った遅延評価Lisp処理系
Top
- JavaScriptで作った遅延評価Lisp処理系
;;;;; lazy evaluation (def (numbers x) (cons x (numbers (+ x 1)))) (numbers 0) ;;=> (0 1 2 3 4 5 6 7 8 9...) (map (* 5) (numbers 0)) ;;=> (0 5 10 15 20 25 30 35 40 45...) ;;;;; curry ((+ 1) 2) ;;=> 3 ((cons 1) 5) ;;=> (1 . 5) (def a 1) (def (incr1 x) (+ a 1)) (def incr2 (+ a)) (def a 2) (incr1 1) ;;=> 3 (incr2 1) ;;=> 2 (def digits (head (> 10) (numbers 0))) digits ;;=> (0 1 2 3 4 5 6 7 8 9) ;;;;; proceduare composition (def ident (. incr decr incr decr)) (ident 30) ;=> 30 ((. (* 3) (+ 1)) 2) ;;=> 9 ;;;;; reduce (sum (list 1 2 3)) ;;=> 6 (def summatrix (. sum (map sum))) (summatrix (list (list 1 2 3) (list 4 5))) ;;=> 15
(def cadr (. car cdr)) (def cddr (. cdr cdr)) (def caddr (. car cddr)) (def cdddr (. cdr cddr)) (def cadddr (. car cdddr)) (def cddddr (. cdr cdddr)) (def (list . args) args) (def (identity x) x) (def (reduce f a b) (if (null? b) a (f (car b) (reduce f a (cdr b))))) (def length (reduce (lambda (x y) (+ 1 y)) 0)) (def sum (reduce + 0)) (def (append a b) (reduce cons b a)) ;(cadddr (append (list 1 2) (list 3 4))) ;=> 4 (def (map f seq) (reduce (. cons f) nil seq)) (def (filter f seq) (reduce (lambda (x y) (if (f x) (cons x y) y)) nil seq)) (def (not x) (if x false true)) (def (and . args) (reduce (lambda (x y) (if x y false)) true args)) ;(and (= 3 3) (= 2 2)) (def (or . args) (reduce (lambda (x y) (if x true y)) false args)) ;(or (= 4 3) (= 2 2)) ;=> true (def (head f l) (reduce (lambda (x y) (if (f x) (cons x y) nil)) nil l)) (def incr (+ 1)) (def decr (+ -1)) (def (<= x y) (or (= x y) (< x y))) (def (>= x y) (or (= x y) (> x y)))
Topへ戻る[U]
株式会社 社会式株