2010-09-09 20 views
2

je déconner en Slime (connecté un Clozure REPL) quand j'ai découvert ceci:Les variables *, + et/sont-elles liées à une entrée récente dans SLIME ou Clozure CL?

On dirait que les variables +, * et/sont tous liés à une certaine variation sur l'entrée récente, + est l'entrée elle-même, * est le résultat de l'évaluation de cette entrée, et/est le résultat contenu dans une liste.

Est-ce exact? Qui est responsable de cela, SLIME ou Clozure? Je n'ai rien trouvé dans le manuel SLIME.

Merci!

; SLIME 2010-05-13 
CL-USER> + 
NIL 
CL-USER> * 
NIL 
CL-USER>/
(NIL) 
CL-USER> - 
- 
CL-USER> + 
- 
CL-USER> (list 1 2) 
(1 2) 
CL-USER> + 
(LIST 1 2) 
CL-USER>/
((LIST 1 2)) 
CL-USER> (+ 1 2) 
3 
CL-USER>/
(3) 
CL-USER> * 
(3) 
CL-USER> (* 1 2) 
2 
CL-USER> * 
2 
CL-USER> 

Répondre

1

+
++
+++

Bien qu'une forme est évaluée par la boucle de niveau supérieur, la variable + est lié à la forme précédente lue par la boucle. La variable ++ contient la valeur précédente de + (c'est-à-dire, la forme évaluée il y a deux interactions), et +++ contient la valeur précédente de ++.

-

Bien qu'une forme est évaluée par la boucle de niveau supérieur, la variable - est lié à la forme elle-même; c'est-à-dire, c'est la valeur qui va être donnée à + une fois que cette interaction est faite.

*
**
***

Bien qu'une forme est évaluée par la boucle de niveau supérieur, la variable * est lié au résultat imprimé à la fin de la dernière fois par le boucle; c'est-à-dire, c'est la valeur produite en évaluant la forme dans +. Si plusieurs valeurs ont été produites, * contient uniquement la première valeur; * contient zéro si des valeurs nulles ont été produites. La variable ** contient la valeur précédente de * (c'est-à-dire, le résultat imprimé il y a deux interactions), et * contient la valeur précédente de **.

/
//
///

Bien qu'une forme est évaluée par la boucle de niveau supérieur, la variable/est lié à la liste des résultats imprimés à la fin de la dernière temps à travers la boucle; c'est-à-dire qu'il s'agit d'une liste de toutes les valeurs produites en évaluant le formulaire dans +. La valeur de * doit toujours être la même que celle de la valeur de /. La variable // contient la valeur précédente de/(c'est-à-dire, les résultats imprimés il y a deux interactions), et /// contient la valeur précédente de //. Par conséquent, la valeur de ** doit toujours être la même que celle de //, et de même pour * et ///.

De Common Lisp the Language, 2nd Edition 20.2