The underscore comes from pattern matching.
The x_ matches anything and this anything is bound to the name x in the body of the function.
l[x_ * y_] := l[x] + l[y];
Then in l[2*z]
first the expression 2*z
is matched against the
pattern x_ * y_
. Then x
is bound to 2 and y
is bound to z
.
Then the expression l[x] + l[y]
is evaluated, and the result becomes
l[2]+l[z]
.
Now say we want to define the value of l
on e
to be 1.
Do we write l[e] := 1
or l[e_] := 1
?
One says that l
to (literally) the variable e
must be 1.
The other says that l
to something gives 1.
http://reference.wolfram.com/mathematica/tutorial/Introduction-Patterns.html