2010-09-17 77 views

回答

33

如果您只是想使用結果而不修改原始數字(參數),請使用內置的「+」或「 - 」功能或其簡寫「1+」或「1-」。如果您想要修改原始位置(包含數字),請使用內置的「incf」或「decf」功能。

使用加法運算符:

(setf num 41) 
(+ 1 num) ; returns 42, does not modify num 
(+ num 1) ; returns 42, does not modify num 
(- num 1) ; returns 40, does not modify num 
(- 1 num) ; NOTE: returns -40, since a - b is not the same as b - a 

或者,如果你願意,你可以使用以下簡寫:

(1+ num) ; returns 42, does not modify num. 
(1- num) ; returns 40, does not modify num. 

注意,Common Lisp的規範定義了上述兩種形式意思相同,並且暗示實施使它們在性能上等同。 Lisp專家表示,雖然這是一個建議,但任何「自我尊重」的實現都不應該導致性能差異。

如果您想更新NUM(不只是得到1個+其值),然後用 「INCF」:

(setf num 41) 
(incf num) ; returns 42, and num is now 42. 

(setf num 41) 
(decf num) ; returns 40, and num is now 40. 

(incf 41) ; FAIL! Can't modify a literal 

注:

您還可以使用INCF/DECF遞增(遞減)超過1個單元:

(setf foo 40) 
(incf foo 2.5) ; returns 42.5, and foo is now 42.5 

有關詳細信息,請參閱Common Lisp的Hyperspec: 1+ incf/decf