2010-09-09 41 views
2

我在泥亂搞(連接Clozure REPL),當我發現這一點:SLIME或Clozure CL中的變量*,+和/綁定到最近的輸入嗎?

它看起來像變量+,*,和/都勢必對最近輸入一些變化,+是輸入本身, *是評估該輸入的結果,並且/是包含在列表中的結果。

這是正確的嗎?誰負責這個SLIME或Clozure?我在SLIME手冊中找不到任何東西。

謝謝!

; 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> 

回答

1

+
++
+++

雖然表單正由頂層循環評價中,可變+被綁定到先前形式由環路讀取。變量++保存前面的+值(也就是說,表單在之前評估了兩個相互作用),+++保存之前的++值。

-

雖然表單正由頂層循環評價中,可變 - 被綁定到形式本身;也就是說,一旦這種互動完成,這是值+。

*
**
***

雖然表單正由頂層循環評價中,變量*被綁定到在最後一次通過結束打印的結果循環;也就是說,它是通過評估+中的形式而產生的價值。如果生成了幾個值,*僅包含第一個值; *如果產生零值,則包含零。變量**保存*的前一個值(也就是結果前兩次打印),*保存**的前一個值。

/
//
///

雖然表單正由頂層循環評價中,變量/綁定到在最後的端部打印的結果的列表通過循環的時間;也就是說,它是通過評估+中的表單產生的所有值的列表。 *的值應該始終與/的值相同。變量//保存前面的值/(也就是說,結果在前面打印兩個交互),///保存前一個值//。因此,**的值應該始終與//的車相同,並且類似地對於*和///。

Common Lisp the Language, 2nd Edition 20.2