lispの演算が直感に反する

CommonLisp

(+ 1 2 3)
> 6
(+ 1 2)
> 3
(+ 1)
> 1

普通ですね.(かけ算も同様なので省略)
次に引き算.

(- 10 5 3)
> 2        ;; 当然
(- 10 5)
> 5        ;; ふむ
(- 10)
> -10      ;; !?

さらに割り算.

(/ 12 3 4)
> 1        ;; はい
(/ 12 3)
> 4        ;; ですよねー
(/ 12)
> 1/12     ;; は?

Emacs Lisp

足し算とかけ算はCommonLispと同様なので省略.
じゃ引き算から.

(- 10 5 3)
> 2        ;; 当然
(- 10 5)
> 5        ;; ふむ
(- 10)
> -10      ;; ぬ?

で,割り算.

(/ 12 3 4)
> 1        ;; おk
(/ 12 3)
> 4        ;; よし
(/ 12)
> (wrong-number-of-arguments / 1) ;; ナンテコッタイ/(^o^)

えー. 理由はもちろん分かるんだけどね….
この挙動は無いわー.

まとめ

CL/elispの引き算/割り算を実装するときは,単純に順にパースして畳み込みしちゃだめです!!
(先読みして引数が1つかどうかを確認しないと.)
注意してください!