2010-09-17 13 views

Odpowiedz

33

Użyj wbudowanych funkcji "+" lub "-" lub ich skrót "1+" lub "1-", jeśli chcesz tylko użyć wyniku, bez modyfikowania oryginalnego numeru (argumentu). Jeśli chcesz zmodyfikować oryginalne miejsce (zawierające numer), użyj wbudowanych funkcji "incf" lub "decf".

Korzystanie operatorowi dodatkowo:

(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 

Lub, jeśli wolisz, możesz kliknąć na poniższy krótki ręki:

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

pamiętać, że wspólna specyfikacja Lisp określa powyższe dwie formy do być równoważne pod względem znaczenia i sugeruje, że implementacje sprawiają, że są one równoważne pod względem wydajności. Chociaż jest to sugestia, zdaniem ekspertów Lisp każda "szanująca się" implementacja nie powinna wykazywać różnicy w wydajności.

Jeśli chcesz zaktualizować num (nie tylko dostać 1 + jego wartość), a następnie użyć "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 

UWAGA:

Można również użyć incf/decf do przyrostu (ubytek) o więcej niż 1 jednostkę:

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

Aby uzyskać więcej informacji, zobacz Common Lisp Hyperspec: 1+ incf/decf