incf
CLISPの (nicf x) は
schemeの (set! x (+ x 1)) に等しい。
schemeのマクロで実現
http://www.shido.info/lisp/scheme_syntax.html
- syntax-rules には複数の変換パターンを定義することができます。例えば、変数の値を増加させるマクロ incf を考えて見ましょう。変数名だけ与えられたときは 1 増やし、変数名と増分が与えら得れたときには増分だけ増やすようにします。 [code 4] のように複数の変換パターンを記述することによって対応することができます。
(define-syntax incf (syntax-rules () ((_ x) (begin (set! x (+ x 1)) x)) ((_ x i) (begin (set! x (+ x i)) x))))
以下の2つはCなどの"++"インクリメントと同様
正式なやり方(?)
(define-syntax incf (syntax-rules () ((_ var) (set! var (+ var 1)))))
http://www.ksky.ne.jp/~sakae/sicp/read-sicp2.html
古いやり方(?)
(define-macro (incf form) `(set! ,form (+ ,form 1)))