Im Prolog können wir Folgendes tun:
%Vor% Das heißt, wenn das erste Argument von myFunction
dasselbe ist wie das erste Element der Liste im zweiten Argument, wird diese Funktion als ...
ausgewertet.
Meine Frage ist jetzt ... wie kann man in Haskell etwas Ähnliches erreichen? Ich habe die Idee, dass Prologs Pattern Matching expressiver ist als Haskells. Ich habe versucht, das in Haskell zu programmieren, und ich habe Probleme - entweder verwende ich ungültige Syntax oder der obige Trick wird einfach nicht tun.
Haskell macht keine Vereinheitlichung von Variablen, wie Prolog es tut. Wie der Haskell 98-Bericht sagt,
Die Menge der Muster, die jeder Übereinstimmung entsprechen, muss linear sein - keine Variable darf mehr als einmal in der gesamten Menge vorkommen.
Sie können die Variablen natürlich benennen und angeben, dass sie auch gleich sein müssen:
%Vor% Interessanterweise lässt Agda Informationen über Muster wie diese fließen und führt eine spezielle Notation f x (.x:_)
ein, um zu sagen, dass diese x
diese x
sein muss.
In Haskell können Sie keine impliziten Vergleiche in einer Musterübereinstimmung durchführen. Stattdessen müssen Sie einen Wächter hinzufügen, der den Vergleich explizit ausführt:
%Vor%Tags und Links haskell syntax pattern-matching prolog unification