[erlang-questions] nand problem
Richard A. O'Keefe
Fri Jan 30 06:22:23 CET 2015
On 27/01/2015, at 6:36 am, Roelof Wobben <r.wobben@REDACTED> wrote:
> I thought I have read somewhere that using _ for defensive programming was nog good practice
> but that was on using other on case on the next chapter.
It all depends.
In languages like SML, Haskell, and F#, the type system ensures that the
arguments *cannot* be anything other than the declared type. So
b_nand :: Bool -> Bool -> Bool
b_nand True True = False
b_nand _ _ = True
is as safe as it could possibly be.
In languages like Prolog and Erlang, the absence of a static type system
means that the arguments could be anything, so writing
nand(true, true, false).
nand(_, _, true).
in Prolog would allow the query nand(1, 1, X) to succeed with X = true.
However, suppose you have a data type with N possible values.
Think of the abstract syntax trees that the Erlang compiler uses,
where N is in the low dozens.
Now suppose you want to write a function that takes two of these
values, but only has O(N) cases that make sense. You *could* write
out all N**2 combinations, but you would have to be mad.
It's only when N is small (like in your example where N = 2) that
avoiding _ begins to make sense.
More information about the erlang-questions