我将如何增加一个变量,就像a=0; a++;
在Chicken中一样?
在 Common Lisp 中,我会这样做incf
:
(setf a 0) (incf a) (print a)
;=> 0
;=> 1
;=> 1
;=> 1
但是 Chicken-scheme 似乎没有incf
函数/宏,我尝试过使用apropos
egg 的东西,但到目前为止这根本没有帮助。
在 C 中,我会像这样增加变量:
int a = 0;
a++;
printf("%d", a);
注意,我不想知道如何简单地a
临时增加 by的值1
,我想增加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
我只想在 Chicken 中编写一个宏来执行此操作,但我似乎无法对 Chicken 的宏进行正面或反面——它们只是没有任何意义;它们根本不像 common-lisps 宏。
这是我刚刚在 common-lisp 中一起破解的示例宏:
(defmacro ++ (sym) (let ((a (gensym "a,sym,") ))
`(let* ((,a ,sym))
(setf ,sym (+ 1 ,a)) ,sym)) )
(setf a 0)
;=> 0
(++ a)
;=> 1
a
;=> 1