CommonLisp Scheme Part11
at TECH
300:270
04/09/14 10:38:48
>>298
やっぱり Gauche はバランスがよく取れているということなのでしょうか。
>>299
そうか!マクロか!と思って、さっそく>>288 のコードをマクロ化してみました。
;元の関数
;(案の定バグがあった(停止しない)ので修正してある。)
(define make-function
(lambda (s-form null-value)
(lambda (list0)
(if (null? list0)
null-value
(s-form (atom? (car list0)
((make-function s-form null-value) (cdr list0))))))))
;マクロ化したもの
(define-syntax make-function
(syntax-rules ()
((_ s-form null-value)
(lambda (list0)
(if (null? list0)
null-value
(s-form (atom? (car list0))
((make-function s-form null-value) (cdr list0))))))))
そうしたら、マクロ展開が停止しないんです。再帰的定義なのに停止条件がないから。
この場合、どう書いたらよいのでしょうか?ヘタレですみません。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5061日前に更新/286 KB
担当:undef