Ich arbeite an Simon Peyton Jones '"Die Implementierung funktionaler Programmiersprachen" und auf Seite 20 sehe ich:
WENN WAHR ((λp.p) 3) ↔ WENN WAHR 3 (pro β-Rot) (1) ↔ (λx.IF TRUE 3 x) (pro η rot) (2) ↔ (λx.3) (3)
Die Schritte 1 bis 2 werden als η-Umwandlung erklärt. Aber von 2 bis 3 heißt es: "Der letzte Schritt ist die Reduktionsregel für IF." Ich bin mir nicht sicher, was diese Reduktionsregel ist.
quelle
IF a b c -> IF a' b c with a-> a'
IF FALSE 3
ist äquivalent zu\x -> IF FALSE 3 x
(vorausgesetzt, eine teilweise Anwendung vonIF
ist zulässig).IF FALSE 3
braucht ein weiteres Argument, um auf einen Wert reduziert zu werden; Anwendung aufx
ErträgeIF FALSE 3 x
, die sich auf einfach reduziertx
. DiesIF FALSE 3
ist in der Tat gleichbedeutend mit\x -> x
, solange wir den untypisierten Lambda-Kalkül verwenden. Wenn Sie dies in Haskell ausprobieren (indem Sie eine Funktion definieren,if' :: Bool -> a -> a
damit Sie sie teilweise anwenden können), erhalten Sie dieid
Funktion, die auf den Typ spezialisiert ist, den Haskell für die3
.