2008-12-01から1ヶ月間の記事一覧

gaucheでのデバッグ

リーダーマクロすげえ。 >>(+ 1 (* 2 #?=(/ 1 3))) #?="(stdin)":1:(/ 1 3) #?- 1/3 =>5/3 >>(+ 1 #?=(* 2 (/ 1 3))) #?="(stdin)":2:(* 2 (/ 1 3)) #?- 2/3 =>5/3http://d.hatena.ne.jp/rui314/20070628/p1スターをつけようと思ったら出てないな…なぜだろう…

gaucheで可変引数で計算量の少ない=を作る

gaucheで可変引数で計算量の少ない=を作る (print (call/cc (lambda (cc) (fold (lambda (x y) (if (eq? x y) x (cc #f))) (begin (write 1) 7) (list (begin (write 2) 7) (begin (write 3) 7)))))) ;=>1237 (print (call/cc (lambda (cc) (fold (lambda (x…

gaucheで可変引数をとる

schemeの可変引数やってなかった。 関数 (define (inc . x) (print x) (print (map (cut + <> 1) x))) (inc 1 2 3 4) ;=>(1 2 3 4) ;=>(2 3 4 5) lambda lambdaの時どうやるんだろう? ((lambda x (print x)) 1 2 3) ;=>(1 2 3)なるほど。単に()を外せばいい…

ubuntuにて日本語pdfを読めるようにする

文字化けが生じることがあったので今回はhttp://www.unixuser.org/~euske/doc/r5rs-ja/r5rs-ja.pdfが読めなかった(涙 日本語PDFの場合必要なパッケージのインストールsudo apt-get install evince ghostscript cmap-adobe-japan1 xpdf-japanesegs-cjk-resou…

Gaucheで魔方陣に挑戦その2

prologの魔方陣の計算速度は総当たり時間なのが分かったのでschemeでもやってみようと思った。 $ time gosh a.scm (2 7 6 9 5 1 4 3 8)15 (2 9 4 7 5 3 6 1 8)15 (4 3 8 9 5 1 2 7 6)15 (4 9 2 3 5 7 8 1 6)15 (6 1 8 7 5 3 2 9 4)15 (6 7 2 1 5 9 8 3 4)15 …

prologでラムダ計算

まずは自然数を定義 %num(X):-Xは自然数。0,1,2,... = 0,s(0),s(s(0)),... num(0). num(s(X)):-num(X).実行してみると正しいことがわかる。 ?- num(0). true. ?- num(s(0)). true. ?- num(s(s(0))). true. 足し算の定義 %num(X):-Xは自然数。0,1,2,... = 0,s…

prologでreverse

つかれた。 reverse(X,Y):-rev(X,[],Y). rev([X|Xs],Z,Y):-rev(Xs,[X|Z],Y). rev([],X,X).答えをYに積んでいくパターン [trace] ?- reverse([1,2,3,4],X). Call: (7) reverse([1, 2, 3, 4], _G348) ? creep Call: (8) rev([1, 2, 3, 4], [], _G348) ? creep …