kiyoka.2010_03_16 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2010_03
5555555555555555555555555555555555555555555555555555555555555555555555555555
5

[Nendo] Gaucheの #?= 相当のデバッグユーティリティをサポート

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

Gaucheには #?=S式 という形式のリーダマクロでデバッグ表示する機能がある。

5

それをNendoでもそっくりそのまま真似てみることにした。

5

結果を見て頂けるとわかるように、本当にソックリな表示になっているのがわかるだろう。

5

これで、手がGaucheに慣れてしまっている人でもNendoで遊びやすくなったかな?

5

近日中にそこそこ遊べるバージョンとして 0.2.0 をリリースするので、粘土遊びを試してみてください。

5

 

5
goshの実行例 (リファレンスマニュアルより抜粋)
5
 今のところ、作者は必要な時は古典的な「プリントスタブ」方式を使っていま
5
 す。そのためのリーダーマクロ #?=expr が定義されています。これは
5
 (debug-print expr) のように読まれ、マクロ debug-print はexprを評価して
5
 その値を返しますが、評価前と評価後にメッセージを出力します。
5

 

5
gosh> #?=(+ 2 3)
5
#?="(stdin)":1:(+ 2 3)
5
#?-    5
5
5
5
gosh> #?=(begin (print "foo") (values 'a 'b 'c))
5
#?="(stdin)":2:(begin (print "foo") (values 'a 'b 'c))
5
foo
5
#?-    a
5
#?+    b
5
#?+    c
5
a
5
b
5
c
5
gosh> (define (fact n)
5
        (if (zero? n)
5
            1
5
            (* n #?=(fact (- n 1)))))
5
fact
5
gosh> (fact 5)
5
#?="(stdin)":6:(fact (- n 1))
5
#?="(stdin)":6:(fact (- n 1))
5
#?="(stdin)":6:(fact (- n 1))
5
#?="(stdin)":6:(fact (- n 1))
5
#?="(stdin)":6:(fact (- n 1))
5
#?-    1
5
#?-    1
5
#?-    2
5
#?-    6
5
#?-    24
5
120
5

 

5
Nendoの実行例 (プログラムをファイルに保存してから実行)
5
ソース fact.nnd
5
#!/bin/sh
5
true; #-*- mode: nendo; syntax: scheme -*-;;
5
true; exec /usr/local/bin/nendo $0 $*
5
5
;; fact
5
(define (fact n)
5
  (if (zero? n)
5
      1
5
      (* n #?=(fact (- n 1)))))
5
5
(print (fact 5))
5

 

5
実行結果
5
bash$ ./fact.nnd 
5
./fact.nnd 
5
#?="./fact.nnd":9:(fact (- n 1))
5
#?="./fact.nnd":9:(fact (- n 1))
5
#?="./fact.nnd":9:(fact (- n 1))
5
#?="./fact.nnd":9:(fact (- n 1))
5
#?="./fact.nnd":9:(fact (- n 1))
5
#?-    1
5
#?-    1
5
#?-    2
5
#?-    6
5
#?-    24
5
120
5

 

5

...comment disabled...