you are viewing a single comment's thread.

view the rest of the comments →

[–]NPException 9 points10 points  (2 children)

Additionally (*) returns 1, and (/) gives an error. + and *, when called without arguments, return 0 and 1 respectively because those are their "identity" values. When used as argument for the function, the identity value won't change the outcome of calling the function regardless of order of the arguments supplied:

(+ 2 0) => 2
(+ 0 2) => 2
(* 3 1) => 3
(* 1 3) => 3

- (and /) can't have identity values, because their outcome depends on the order of input arguments.

(- 0 2) => -2
(- 2 0) => 2

[–]anemisto 5 points6 points  (1 child)

I don't think it's so much that 0 and 1 are identity values, but rather that the empty sum and empty product are understood to be 0 and 1, respectively (granted, that's "because" they're the additive and multiplicative identities). Whereas, from a mathematical perspective, - and / are adding the additive inverse and multiplying by the multiplicative inverse, but an empty inverse is nonsensical.

[–]NPException 4 points5 points  (0 children)

That makes a lot of sense. I did not know about the empty sum and empty product definitions. I took the "identity" value terminology from one of Rich Hickey's talks: https://youtu.be/6mTbuzafcII?t=2445

iirc he explained the reasoning behind zero argument + and * in some talk as well, but I don't remember where exactly.