Übereinstimmende äquivalente Variablen in Haskell, wie in Prolog

9

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.

    
devoured elysium 04.11.2010, 00:37
quelle

3 Antworten

13

Haskell macht diese Art von "variablem Matching" nicht. Du musst explizit eine Wache setzen:

%Vor%     
porges 04.11.2010, 00:39
quelle
12

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.

    
Don Stewart 07.05.2011 03:00
quelle
8

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%     
Tom Crockett 04.11.2010 00:39
quelle