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つかどうかを確認しないと.)
注意してください!