Schéma: Pourquoi l'évaluation de cette fonction récursive définie-t-elle dans LeTREC échoue-t-elle?

StackOverflow https://stackoverflow.com/questions/5044454

Question

J'écris un schéma idiot de Letdrec (Drracket assez grand):

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

La vérification de la syntaxe était correcte, mais l'exécution échoue avec:

reference to undefined identifier: is-creative?

Le débogueur dit au moment de l'échec que:

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

Pouvez-vous me dire ce qui me manque? La correction serait également bien, mais s'il vous plaît, pas de définition, pas nécessaire cependant.

Merci!

Était-ce utile?

La solution

EVAL ne voit pas de variables locales. Dans la portée où l'évaluation est en cours d'exécution, est-ce qui est créatif? est lié en tant que variable locale mais, parce qu'elle est à l'intérieur du (letRec) et non après elle, elle n'a pas encore été liée dans la portée globale. Voir la documentation de l'évaluation, qui en discute:

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

Je ne pense pas que vous puissiez faire ce que vous essayez de faire avec Eval. Je ne connais pas la raison pour laquelle vous essayez de le faire, il est donc difficile pour moi de suggérer une alternative. Vous pouvez cependant essayer d'utiliser (postuler).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top