(- x)について

lispをいじっていて、絶対値を返す関数を書いていたときに思った疑問です。

絶対値を返す関数はこんな風にかけます。

(define (abs x) (if (> x 0) x (- x)))

自分で書いていて、「おや?」と思ったので、ちょいと実験をしてみることにしました。

まずは、普通の加算から考えていきます。

(+ 1 2 3 4 5 6 7 8 9 10)

を評価すると55になるでしょ。

これは、リストに含まれている値を全部足しているってことだよね
つまり

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 

ってことですよね

じゃあ、マイナスはっていうと

(- 1 2 3 4 5 6 7 8 9 10)

これを評価すると-53になる訳だ。

これが、-55じゃないのがみそで、

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10

と同じことだから、-53になるってわけだ。

じゃ

(- 10)

を評価するとどうなるんだろうって思うよね

こいつを評価すると、なんと-10になってしまう訳だ。

こいつは

0 - 10

って解釈されてるんでしょうか?

じゃ、乗算/除算はどうなるのかって疑問に思いますよね?

(print (+ 10))
(print (- 10))
(print (* 10))
(print (/ 10))

こんなことやって試してみました。
結果は、

10
-10
10
1/10

こんな感じになりましたと...

リストに値が一つの場合、加減算のときは0と計算を行い、乗除算のときは1と計算を行うってことなんですかね?

...なんかすっきりとしなくて気持ち悪い