ماذا يفعل هذا الموحد:ق (ق ك)
-
12-12-2019 - |
سؤال
أفهم الآن نوع التوقيع s (s k)
:
s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1
ويمكنني إنشاء أمثلة تعمل بدون أخطاء في أداة Haskell WinGHCi:
مثال:
s (s k) (\g -> 2) (\x -> 3)
عائدات 2
.
مثال:
s (s k) (\g -> g 3) successor
عائدات 4
.
أين successor
يتم تعريفه على النحو التالي:
successor = (\x -> x + 1)
ومع ذلك، لا يزال ليس لدي شعور بديهي لماذا؟ s (s k)
يفعل.
الموحد s (s k)
يأخذ أي وظيفتين f
و g
.ماذا فعلت s (s k)
افعل مع f
و g
؟هل تعطيني الصورة الكبيرة على ماذا s (s k)
هل من فضلك؟
المحلول
حسنا، دعونا ننظر إلى ما S (S K)
وسائل.سأستخدم هذه التعريفات:
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)
كما ترون، انها مجرد ($)
مع نوع أكثر تحديدا.
لا تنتمي إلى StackOverflow