5

मैं अब s (s k) के प्रकार के हस्ताक्षर को समझने:क्या इस Combinator करता है: रों (sk)

s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1 

और मुझे लगता है कि हास्केल 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) पर क्या है?

+1

'एस (एस के)' के लिए परिभाषा गुम है। क्या यह वही 's' और' k' है http://stackoverflow.com/questions/9592191/the-type-ignature-of-a-combinator-does-not-match-the-type-ignature-of- इसकी इक्की? –

+0

बीटीडब्ल्यू, सहज ज्ञान युक्त क्या है? क्या आपको http://en.wikipedia.org/wiki/Ouroboros अंतर्ज्ञानी मिला है? क्या आप कल्पना कर सकते हैं कि एक सांप खुद खाता है और गायब हो जाता है? या एक रोबोट जो खुद से खुद को बनाता है? आपको स्वयं पर अभिनय करने वाले किसी चीज़ पर बेहतर समझ की आवश्यकता है। –

उत्तर

11

ठीक है, देखते हैं कि 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) 

आप देख सकते हैं, इसे और अधिक विशिष्ट प्रकार के साथ सिर्फ ($) है।

+2

इसे देखने का एक और तरीका: प्रकार '((टी 1 -> टी 2) -> टी 1) -> (टी 1 -> टी 2) -> टी 1' है। कोष्ठक जोड़ना, हमें '((टी 1 -> टी 2) -> टी 1) -> ((टी 1 -> टी 2) -> टी 1)' मिलता है। 'Α' के लिए' α' स्टैंड को टाइप करना (t1 -> t2) -> t1', यह केवल 'α -> α' है, और इसलिए, पैरामीट्रिकिटी द्वारा, एस (एसके)' एक विशिष्ट विशिष्ट के साथ पहचान फ़ंक्शन है प्रकार। (और निश्चित रूप से, '($) :: (ए -> बी) -> ए -> बी' * * * एक विशिष्ट प्रकार के साथ पहचान पहचान भी है।) –

+0

दरअसल, अगर हम η- को कम करते हैं \ y -> \ z -> yz', हमें 'y y -> y' मिलता है। – Vitus

+1

संयोजकों में, एस के वाई जेड = के जेड (वाई जेड) = जेड। फिर एस (एस के) वाई जेड = एस के जेड (वाई जेड) = के (वाई जेड) (जेड (वाई जेड)) = वाई जेड। – rickythesk8r