Valeur nulle dans Mit-Scheme?
Quelqu'un peut-il me dire quelle est la représentation de la valeur nulle dans mit-scheme? Dans le livre SICP, il devrait être " nil " mais cela ne fonctionne pas. Grâce.
4 réponses
'()
ça devrait marcher. Fondamentalement, nul en régime est la liste vide, donc, citant une liste vide vous donne néant.
Il y a l'histoire. visite http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions
Original(cassé): http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions
Texte de la FAQ ci-dessus (en cas de rupture D'Internet Archive):
Pourquoi " nil " ne fonctionne-t-il pas?
La réponse rapide est: nil ne fait plus partie du schéma, utilisez '()
à la place. La réponse longue suit...
Les premiers exemples du Chapitre 2 utilisent nil
comme terminateur de liste, mais lorsque ces exemples sont exécutés en utilisant (par exemple) le schéma MIT, vous obtenez:
;Unbound variable: nil
De même, l'utilisation de ()
ou null
à la place de nil
peut fonctionner sur certaines implémentations, mais aucune n'est portable. Le Livre de L'Assistant aborde le problème dans cette note de bas de page
Il est remarquable de voir combien d'énergie dans la standardisation des dialectes Lisp a été dissipée dans des arguments qui sont littéralement au-dessus de rien: should nil be un nom ordinaire? Si la valeur de néant être un symbole? Devrait-il être une liste? Devrait-il être une paire? Dans Scheme, nil est un nom ordinaire, que nous utilisons dans cette section comme une variable dont la valeur est le marqueur de fin de liste (tout comme true est une variable ordinaire qui a une valeur vraie). D'autres dialectes de Lisp, y compris Common Lisp, traitent nil comme un symbole spécial. Les auteurs de ce livre, qui ont enduré trop de bagarres de normalisation linguistique, aimeraient éviter toute la question. Une fois que nous avons introduit citation dans la section 2.3, nous allons dénoter la liste vide comme ‘ () et se passer de la variable nil entièrement.
Depuis que cela a été écrit, nil a été excisé de la norme Scheme-mais la ligne du bas est la suivante: use'‘), pas nil. Dans un courriel à la liste accu-sicp, Mike Note:
C'est une chose gênante, cette affaire nil/null/' (). Scheme48 et scm ne définit pas null, et guile le définit mais comme une procédure similaire à null De common lisp (aller avec son nil qui se comporte comme le Nil de cl, qui lui-même est distinct de '() - peut-être que cela avait quelque chose à faire avec les plans de la fsf de refaire emacs dans guile). Je pense que le meilleur pari est de remplacez les auteurs de l'utilisation de nul avec ‘().
[copié avec juste une touche de nettoyage typographique, pour mieux correspondre à Markdown et à l'entrée ASCII habituelle dans les langages / implémentations en question.]
J'utilise MIT/GNU Scheme microcode 15.3
, ()
et '()
toutes les œuvres. (comme vous l'avez dit, nil
et null
ne fonctionne pas).
1 ]=> ()
;Value: ()
1 ]=> '()
;Value: ()
1 ]=> (cons 1 ())
;Value 2: (1)
1 ]=> (cons 1 '())
;Value 3: (1)
(list) ' () et () peuvent représenter null. par exemple,
(define (transpose mat) (accumulate-n cons () mat))
Ou remplacez () par ' () ou (list).