incf / decf — 값을 증가·감소시키는 매크로

incf / decf — 값을 증가·감소시키는 매크로

숫자를 저장해 두고 하나씩 늘리거나 줄이는 일은 정말 자주 있어요. count를 세거나 인덱스를 옮길 때 말이죠. (setf x (+ x 1))이라고 매번 쓰는 대신 incf x라고 쓰면 훨씬 읽기 좋아요. incfdecf는 place의 값을 각각 증가·감소시키는 매크로예요.

출처: CLHS 공식 문서 - INCF, DECF

본문

incfplace의 값에 delta를 더하고, decfplace의 값에서 delta를 뺀 뒤 그 결과를 다시 place에 저장해요. 증가·감소뿐 아니라, 반환값도 갱신된 값이에요.

incf place [delta-form] => new-value
decf place [delta-form] => new-value

delta-form은 생략할 수 있고, 생략하면 기본값이 1이에요. 필요한 타입 변환은 자동으로 수행돼요.

(setq n 0)
(incf n)        ; =>  1
n               ; =>  1
(decf n 3)      ; =>  -2
n               ; =>  -2
(decf n -5)     ; =>  3
(decf n)        ; =>  2
(incf n 0.5)    ; =>  2.5
(decf n)        ; =>  1.5
n               ; =>  1.5

(decf n -5)처럼 delta가 음수면 실제로는 증가하는 결과가 나와요. 형식상 감소 연산이지만, 빼는 값이 음수라 값이 커지죠. 0.5 더하기 같은 정수·실수 혼합도 타입 변환이 자동으로 이뤄져요.

함께 보기

+, -, 1+, 1-, setf