سؤال

أفهم الآن نوع التوقيع 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)

كما ترون، انها مجرد ($) مع نوع أكثر تحديدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top