2010-06-03 15 views
0

Contexte: Je suis nouveau sur le schéma, et j'utilise DrScheme pour écrire mes programmes.Avez-vous besoin d'utiliser l'affichage pour sortir des choses en utilisant r6rs?

Les sorties programme suivant 12345 lorsque je lance le programme r5rs:

12345 

Cependant les sorties programme suivant rien (c'est un programme r6rs):

#!r6rs 
(import (rnrs)) 

12345 

Cela étant dit, je peux obtenir à la sortie 12 345 en faisant ceci:

#!r6rs 
(import (rnrs)) 

(display 1235) 

Est-ce quelque chose de nouveau avec r6rs, whe re sortie ne se produit que lorsque spécifiquement spécifié en utilisant display? Ou suis-je juste faire quelque chose d'autre

+0

une constante nue ne devrait pas imprimer automatiquement. – muhmuhten

Répondre

1

Ceci est un problème subtil que vous voyez ici. Dans PLT, le mode de fonctionnement préféré consiste à écrire du code dans un module, où chaque module a une spécification du langage dans lequel il est écrit. Généralement, la langue par défaut est #lang scheme (et #! est l'abréviation de #lang). Dans ce langage, toutes les expressions hors définition de haut niveau ont pour comportement d'afficher leurs valeurs (à moins qu'elles ne soient nulles - comme dans le cas de la plupart des effets secondaires). Mais les #lang r5rs et #lang r6rs ne font pas la même chose - donc ces expressions de haut niveau sont évaluées mais jamais affichées.

La raison pour laquelle vous avez fait voir sortie avec la langue r5rs est que vous n'avez pas utilisé comme un « module » (comme dans #lang r5rs), mais plutôt utilisé le r5rs spécifique « niveau de langue ». Ce niveau de langage est plus compatible avec le R5RS, mais pour diverses raisons subtiles, ce n'est pas une bonne idée en général. L'utilisation de #lang est donc généralement meilleure, et si vous voulez vous épargner des maux de tête redondants supplémentaires, ce sera plus facile si vous restez avec #lang scheme pour l'instant, et vous inquiétez des normes plus tard. (Mais YMMV, bien sûr.)