Je suis les conférences SICP du MIT, et c'est ce que j'ai essayé de trouver l'approximation de racine carrée d'un nombre par la méthode de Héron d'Alexandrie. C'est la première fois que j'essaie un zézaiement, désolé de faire des erreurs. J'utilise Chicken scheme compiler pour imprimer ceci. Ceci est la sortie:Erreur: (/) mauvais type d'argument: # <unspecified> Poulet Scheme Approximation racine carrée
Error: (/) bad argument type: #<unspecified>
Call history:
1.a.SquareRootApproximation.scm:29: try
1.a.SquareRootApproximation.scm:17: goodEnough
1.a.SquareRootApproximation.scm:27: avg
1.a.SquareRootApproximation.scm:19: improve <--
Mise à jour: J'ai changé mon approche face à ce problème en utilisant Lisp avec plus abstraction, mais je ne peux pas comprendre ce que cette nouvelle erreur veut impliquer. Des correctifs? Merci!
Je n'en ai pas encore entendu parler, je suis toujours sur la première conférence. Peut-être que la nouvelle supposition est la bonne façon d'y aller. Merci. Cela a fonctionné avec la nouvelle variable. –
Il est très bien spécifié puisque dans R5RS et plus tôt 'define' dans' lambda' (et les formes dérivées) sont 'letrec' ne permettant aucune des variables d'être évaluées avant le corps et dans R6RS et plus tard c'est un' letrec * ' ce qui permet d'évaluer les variables déjà initialisées. Bien sûr, aucun de ceux-ci n'autorise l'évaluation d'une variable qui est ombrée par ** tout ** local 'define' dans le même' lambda'. 'letrec' et' letrec * 'permettent de faire des fonctions récursives et donc la liaison doit exister au moment de la création de la fermeture. – Sylwester
Il est bien spécifié en ce sens que "c'est une erreur" de se référer directement dans les formulaires "" à la valeur de tout "". Cependant, cela signifie essentiellement que "la mise en œuvre est libre de faire ce qu'elle veut". En substance, il est similaire à "comportement indéfini" dans C. Tout ce qui "est une erreur" tombe en dehors de la spécification et les programmes qui causent une telle erreur peuvent ou non exécuter/compiler. Ceci est très dépendant de l'implémentation, comme vous pouvez le voir dans mon exemple: MIT, Racket et Scheme48 se comportent très différemment de CHICKEN, Guile, Gambit et Gauche. –
sjamaan