25
什麼是慣用常見的Lisp方式增加/減少數字和/或數字變量?如何增加或減少Common Lisp中的數字?
什麼是慣用常見的Lisp方式增加/減少數字和/或數字變量?如何增加或減少Common Lisp中的數字?
如果您只是想使用結果而不修改原始數字(參數),請使用內置的「+」或「 - 」功能或其簡寫「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