2

私はSchemeでばかげたletrecを書いています(DrRacket Pretty Big):

(letrec
    ((is-creative? 
      (lambda (writing)
        (if (null? writing)
            #f
            (is-creative? 
             (eval writing))))))
(is-creative? 
 (quote is-creative?)))

構文チェックは問題ありませんでしたが、実行すると次のように失敗します。

reference to undefined identifier: is-creative?

デバッガーは、障害の時点で次のように言います。

is-creative? => #<procedure:is-creative?>

何が足りないのか教えてください。修正もいいでしょうが、必要ではありませんが、定義しないでください。

ありがとうございました!

4

1 に答える 1

2

Eval はローカル変数を認識しません。eval が実行されているスコープでは、is-creative? ローカル変数としてバインドされていますが、(letrec) の内側にあり、その後ではないため、まだグローバル スコープにバインドされていません。これについて説明している eval のドキュメントを参照してください。

http://docs.racket-lang.org/guide/eval.html

eval でやろうとしていることはできないと思います。あなたがそれをしようとしている理由がわからないので、代替案を提案するのは難しい. ただし、代わりに (apply) を使用してみてください。

于 2011-02-18T17:38:51.407 に答える