2016-09-24 6 views
-2

Ich habe eine Art Funktion wie dieseWie kann ich diese Funktion in Haskell aufrufen?

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool 

Aber ich kann es nicht nennen. Kann mir jemand ein Beispiel geben: zum Beispiel Funktion a b c an einem Beispiel?

+0

Es kann hilfreich sein, wenn Sie beschreiben können, was diese Funktion macht und was jedes Argument bedeutet. – Javran

Antwort

1

Es sieht so aus, als ob Sie eine etwas komplizierte Funktion haben, die mit einer Hilfsfunktion nach einer Mitgliedschaft in einer Assoziationsliste sucht.

Die Funktion, die Sie zur Verfügung gestellt:

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool 

nimmt drei Argumente:

  • ein Element a zu vergleichen,
  • eine Hilfsfunktion b -> c -> a,
  • ein Argument für die Hilfsfunktion b ,
  • eine Liste von Tupel [(d, c)].

Dann eine mögliche Funktion des Typs Sie vorgesehen ist:

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool 
function a f b ((_,c):rest) = ((f b c) == a) || (function a f b rest 
function a f b rest   = False 

, die für eine Mitgliedschaft in der Liste überprüft, indem das erste Element des Tupels zu ignorieren und die Hilfsfunktion auf die zweite Anwendung Argument des Tupels.

Während die Funktion kann kompliziert erscheinen, können Sie es auf einem recht einfachen Beispiel

function True (==) 0 [("a", 0), ("b",1)] 

Im obigen Beispiel führen könnte, suchen wir für 0 die (==) Helferfunktion verwenden, und wir überprüfen, ob die Funktion Helfer gibt True zurück.

1

Der Typ ist so allgemein, dass es schwer ist, darüber nachzudenken, was die Funktion tatsächlich macht. Da jedoch a, b, c und d wenige Einschränkungen haben, lassen Sie sich ein Beispiel nennen, wo sie alle erfüllen passieren Int:

function (3::Int) (+) 5 [(1,2), (3,4)] 

Das erste Argument hat Typ a, mit der einzigen Einschränkung, dass es zu sein sein eine Instanz von Eq sein. 3 :: Int erfüllt diese Anforderung. Das zweite Argument muss nur eine Zwei-Argument-Funktion sein, die eine Int zurückgibt. (+) erfüllt diese Anforderung, während b ~ c ~ Int ebenso behoben wird.

Das dritte Argument muss auch vom Typ b ~ Int sein.

Das letzte Argument muss nur eine Liste des Typs [(d, Int)] für jeden Typ d sein. Wir werden nur eine Liste von Paaren von Int s übergeben.

Verwandte Themen