Was macht dieser Kombinator:s (s k)
-
12-12-2019 - |
Frage
Ich verstehe jetzt die Typsignatur von s (s k)
:
s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1
Und ich kann Beispiele erstellen, die im Haskell WinGHCi-Tool fehlerfrei funktionieren:
Beispiel:
s (s k) (\g -> 2) (\x -> 3)
kehrt zurück 2
.
Beispiel:
s (s k) (\g -> g 3) successor
kehrt zurück 4
.
Wo successor
ist wie folgt definiert:
successor = (\x -> x + 1)
Trotzdem habe ich es immer noch nicht ein intuitives Gefühl wofür s (s k)
tut.
Der Kombinator s (s k)
übernimmt zwei beliebige Funktionen f
Und g
.Was macht s (s k)
machen mit f
Und g
?Würdest du mir geben Das große Bild auf was s (s k)
bitte?
Lösung
Okay, schauen wir uns mal an, was S (S K)
bedeutet.Ich werde diese Definitionen verwenden:
S = \x y z -> x z (y z)
K = \x y -> x
S (S K) = (\x y z -> x z (y z)) ((\x y z -> x z (y z)) (\a b -> a)) -- rename bound variables in K
= (\x y z -> x z (y z)) (\y z -> (\a b -> a) z (y z)) -- apply S to K
= (\x y z -> x z (y z)) (\y z -> (\b -> z) (y z)) -- apply K to z
= (\x y z -> x z (y z)) (\y z -> z) -- apply (\_ -> z) to (y z)
= (\x y z -> x z (y z)) (\a b -> b) -- rename bound variables
= (\y z -> (\a b -> b) z (y z)) -- apply S to (\a b -> b)
= (\y z -> (\b -> b) (y z)) -- apply (\a b -> b) to z
= (\y z -> y z) -- apply id to (y z)
Wie Sie sehen, ist es einfach so ($)
mit spezifischerem Typ.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow