なんかメモ

いろいろメモ

((Pythonで) 書く (Lisp) インタプリタ) をGoで書いてみる

((Pythonで) 書く (Lisp) インタプリタ) をGoでリハビリがてら書いてみた
結構適当だけどリンク先のサンプルが同じような感じで動いてくれるのでまあよし

% go run lis.go
lis.go> (define area (lambda (r) (* 3.141592653 (* r r))))
area
lis.go> (area 3)
28.274333877
lis.go> (define fact (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1))))))
fact
lis.go> (fact 10)
3.6288e+06
lis.go> (fact 100)
9.33262154439441e+157
lis.go> (area (fact 10))
4.136908719801619e+13
lis.go> (define first car)
first
lis.go> (define rest cdr)
rest
lis.go> (define count (lambda (item L) (if (not (null? L)) (+ (if (equal? item (first L)) 1 0) (count item (rest L))) 0)))
count
lis.go> (count 0 (list 0 1 2 3 0 0))
3

((Pythonで) 書く (Lisp) インタプリタ) をGoで書いてみる

リンク

((Pythonで) 書く (Lisp) インタプリタ)

scm.go, a Scheme interpreter in Go, as in SICP and lis.py | De Babbelbox of Pieter Kelchtermans