我將如何去增加一個變量,這就是a=0; a++;
雞?C的'++`計劃版本
在Common Lisp的我會做到這一點使用incf
像這樣:
(setf a 0) (incf a) (print a)
;=> 0
;=> 1
;=> 1
;=> 1
但雞的方案似乎並不具有incf
功能/宏,我已經使用apropos
啄蛋嘗試,但迄今爲止這一切都沒有幫助。
在C,我會增加變量,像這樣:
int a = 0;
a++;
printf("%d", a);
注意,我不想知道如何簡單地暫時1
增加a
的價值,我想遞增a
以便a
不再等於0
,但等於1
。
因此,以下是不我想要的東西:
(let ((a 0)) (set! a (+ 1 a)) (print a))
這裏是什麼,我正在尋找一個例子 - 寫在NewLisp:
(set 'a 0) (++ a) (println a)
注意 函數/宏需要能夠接受一個帶引號的變量並永久增加該變量的值。因此,它需要等同於下面的C代碼:
a = 0; a++; // a now equals 1
我只是寫一個宏來做到這一點的雞,但我似乎無法使磁頭或雞的宏的尾巴 - 他們只是沒有任何意義;它們完全不同於普通Lisp宏。
這裏有一個例子宏,我砍死在一起共口齒不清:
(defmacro ++ (sym) (let ((a (gensym "a,sym,")))
`(let* ((,a ,sym))
(setf ,sym (+ 1 ,a)) ,sym)))
(setf a 0)
;=> 0
(++ a)
;=> 1
a
;=> 1
**注* *如果我不能這樣做'(set!a 0)(SOME-FUNCTION-OR-MACRO a)(print a)'並從'(print a)'返回'1',那麼這不是我想。 –
我編輯了我的答案。檢查。 – ramrunner
Svante的回答是正確的(你應該告訴他爲什麼你認爲它不是),但是如果你不想複製他的宏到你的代碼中,它可以在miscmacros egg中使用(同名,inc! )。這個版本,就像CL中的incf一樣,有一個可選的第二個參數,讓你說增加多少。 –