Parens Language in Lisp

404 Blog Not Found:Math - 新言語、(), [] and {}
これはLispで実装しとかないとなーという事で書いてみた。Gauche用。
parens language (in scheme)

こんな感じで動いてます。

gosh> (parens->lisp '((((())))(((())))(((())))))   ; (UUUU)(UUU)(UUU) = SKK = I
(((U (U (U (U U)))) (U (U (U U)))) (U (U (U U))))
gosh> (parens->jsstr   '((((())))(((())))(((())))))
"U(U(U(U(U))))(U(U(U(U))))(U(U(U(U))))"
gosh> ((parens '((((())))(((())))(((()))))) 'hi)   ; (I 'hi)
hi
gosh> (define (num->parens n)
	  (case n
	    ((0) '(()))
	    ((1) ())
	    (else `((((()))) ((((())))(((()))((((())))))(((()))))  ; succ = S(S(KS)K)
		    (,(num->parens (- n 1)))))))

num->parens
gosh> (define (cnum->num f) ((f (cut + <> 1)) 0))

cnum->num
gosh> (let ((c2 (parens #?=(num->parens 2))))
	(cnum->num (((c2 c2) c2) c2)))
#?="(input string port)":1:(num->parens 2)
#?-    ((((()))) ((((()))) (((())) ((((()))))) (((())))) (()))
65536

ついでにCommonLisp版も。

あと括弧カッコカワイイ宣言 10/4発売です。

カッコカワイイ宣言! 1 (ジャンプコミックス)

カッコカワイイ宣言! 1 (ジャンプコミックス)

今月号にも出てた加奈子はちょっと可愛いかもしれない。