Subtraction¶
Integers and rational numbers
can be subtracted using the -
operator. For example:
Disco> 1 - 5
-4
Disco> 2/3 - 1/2
1/6
It is not possible to subtract natural numbers or fractional numbers since those numeric types have no concept of negative numbers; however, in many situations, if you subtract natural or fractional numbers they will be automatically converted to integers or rationals as appropriate.
In some situations, you really do need to subtract natural or fractional numbers. For example, consider this incorrect definition of the factorial function:
fact_bad : N -> N
fact_bad(0) = 1
fact_bad(n) = n * fact_bad(n-1)
This definition will yield an error, because subtracting two natural
numbers is not allowed: in particular, n
is a natural number and
we are attempting to perform the subtraction n-1
. One solution is
to use the special “dot minus” operator .-
(also written ∸
),
which simply stops at zero instead of yielding negative numbers:
Disco> 5 .- 3
2
Disco> 5 .- 4
1
Disco> 5 .- 5
0
Disco> 5 .- 6
0
Disco> 5 .- 7
0
Using dot minus, we can write a correct definition of factorial as follows:
fact : N -> N
fact(0) = 1
fact(n) = n * fact(n .- 1)
(Alternatively, we could define fact
using an arithmetic
pattern; see that page for more info.)