0
$\begingroup$

As you can see,the original Differences will get {} when your parameter is a list with one element just.

Differences /@ {{1, 2, 3}, {4, 5}, {6}}

{{1, 1}, {1}, {}}

Then we can change it like this

Unprotect[Differences];
Differences[{a_}] := {a};
Differences /@ {{1, 2, 3}, {4, 5}, {6}}

{{1, 1}, {1}, {6}}

But the same method don't fit the Times and Divide

Unprotect[Times];
Times[0, 0] := "NAN"
Times[0, 0]
0*0
Times[2, 3]

enter image description here

Or like the Divide

Unprotect[Divide];
Divide[0, 0] := "NAN"
Divide[0, 0]
0/0
Divide[2, 3]

enter image description here

$\endgroup$
7
  • 4
    $\begingroup$ Still a bit unclear - do you want to change Times etc? This is a really bad idea for such elementary functions, as it will mess up your system in unpredictable ways and bite you in the end. Is there a deeper reason not to use a custom function? $\endgroup$ – Yves Klett Jan 20 '16 at 14:21
  • $\begingroup$ Thanks for your advice very much,but I wanna change it still in my situation. $\endgroup$ – yode Jan 20 '16 at 14:24
  • 7
    $\begingroup$ There is a lot of indication that the built-in mathematical operations are deeply wired into the parser to speed up their operations, unlike Differences. So, adding DownValues for them is not very effective. $\endgroup$ – rcollyer Jan 20 '16 at 14:35
  • $\begingroup$ I am curious to see if/what @DanielLichtblau might report on messing with Times and friends. $\endgroup$ – Yves Klett Jan 20 '16 at 14:50
  • 3
    $\begingroup$ You should define new functions that deal with the special cases and then defer to Times, Divide, Differences etc. to process the non-special cases afterwards. There is simply no way to reliably change Times, for example. Its definition is hard-coded into the system. Even if you could, you shouldn't: do you really think Mathematica's own functions don't rely on a consistent concept of multiplication? $\endgroup$ – Oleksandr R. Jan 20 '16 at 22:07