In prolog, we can do something like the following:
myFunction a (a:xs) = ...
This is, when the 1st argument of myFunction
is the same as the first item of the list that's in the 2nd argument, this function will evaluate to ...
.
My question now is... how to accomplish a similar thing in Haskell? I have the idea that Prolog's Pattern Matching is more expressive than Haskell's. I've been trying to code that in Haskell and I'm having trouble -- either I am using invalid syntax or the above trick will simply not do.
Haskell doesn't do this kind of "variable matching". You'll have to explicitly put a guard on:
myFunction a (x:xs)
| x == a = ...
Haskell doesn't do unification of variables, as Prolog does. As the Haskell 98 report says,
The set of patterns corresponding to each match must be linear---no variable is allowed to appear more than once in the entire set.
You can of course name the variables, and state they must also be equal:
f a (b:_) | a == b = ...
Interestingly, Agda does let information flow across patterns like this, and introduces a special notation f x (.x:_)
to say that this x
must be that x
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With