2016-05-04 6 views
1

Sorry für die Frage, aber ich bin gerade beginnen das Studium Haskell ... Meine Frage an verwandt ist „Fixpunkt combinator“ ...denke, die Art der Festpunkt combinator

zu this wikipedia page section Nach einer Funktion fix solchen dass

fix f = f (fix f) 

vom Typ

(a -> a) -> a 

kann jemand mir erklären (oder zumindest kann der Typ sein), warum?

Danke!

Haben Sie auch irgendwelche Zeiger (Webseiten, Bücher ...), die erklären, wie man den Typ einer Funktion aus ihrer Definition erraten kann?

+0

Haben Sie lesen [diese Frage] (http://stackoverflow.com/questions/8099349/fixed-point -combinator-in-haskell) – Guvante

+0

Dank Guvante, ich habe es gesehen, aber von dem, was ich davon verstehe, ist es nicht genau das, was ich gefragt habe ... Was ich möchte, ist eine analytische Antwort oder ein Punkt auf eine allgemeine Methode zu lösen diese Art von Problem ... – godot

+0

'fix f' ist nicht' f'. Es ist 'f (fix f)'. – dfeuer

Antwort

6

starten aus der Definition

fix f = f (fix f) 

Da es ein Argument nimmt, muss fix einen Typ haben, wie

sieht
fix :: x -> y 

Es sein Argument zu etwas gilt, so in der Tat

fix :: (p -> q) -> r 

Es gilt tatsächlich sein Argument fix f , So

fix :: (r -> q) -> r 

Das Endergebnis ist eigentlich das Ergebnis dieser Anwendung, so

fix :: (r -> r) -> r