Chickena=0; a++;
のようなことをしている変数をインクリメントするにはどうすればよいですか?
Common Lisp ではincf
、次のように使用します。
(setf a 0) (incf a) (print a)
;=> 0
;=> 1
;=> 1
;=> 1
incf
しかし、Chicken-scheme には関数/マクロがないようで、apropos
卵のようなものを使用してみましたが、これまでのところまったく役に立ちませんでした。
C では、次のように変数をインクリメントします。
int a = 0;
a++;
printf("%d", a);
注a
、一時的にの値を単純に増やす方法を知りたくあり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