CommonLisp Scheme Part12
■ このスレッドは過去ログ倉庫に格納されています
0017デフォルトの名無しさん
NGNGリスト内の任意のシンボルに対して、unquote付加を自動的に行いたい
という要件が発生しました。
以下の様なただのリストの入力に対し、指定したシンボル全てにunquoteを付加し、
擬似リストとして返す関数quotifyを実装してください。
ただし、リスト内のlambda文の変数スコープ規則を解釈する事。
書式: (quotify <unquoteしたいシンボルを列挙したリスト> <入力リスト>)
呼び出し例:
(quotify '(proc list)
'((lambda (f r rr list)
(while (pair? list)
(set! rr (cons (proc (car list)) '()))
(if (pair? f) (set! r (set-cdr! r rr)) (set! r (set! f rr)))
(set! list (cdr list)))
f) '() '() '() list)))
期待する出力結果:
`((lambda (f r rr list)
(while (pair? list)
(set! rr (cons (,proc (car list)) '()))
(if (pair? f) (set! r (set-cdr! r rr)) (set! r (set! f rr)))
(set! list (cdr list)))
f) '() '() '() ,list)
つまり、この出力をそのまま実行するとunquote部分がカレント環境で変換されます。
上の例の変数listの様にきちんとlambdaの中と外を区別する必要があります。
ただの変換なら簡単ですが、lambdaの解釈で多少複雑になると思います。
■ このスレッドは過去ログ倉庫に格納されています