मुझे पता है कि मैं इस तरह के एसएमएल में वाई-संयोजक लिख सकता हूं: सर्कुलरिटी के कारण टाइप मिस्चैच को बाईपास करने के लिए पहले एक नया डेटाटाइप घोषित करें।वाईएम-संयोजक मानकएमएल
val Y = fn f => (fn x => fn a => f (unroll x x) a)
(Roll (fn x => fn a => f (unroll x x) a)))
तो आप कर चुके हैं, तो आप इसे इस तरह से उपयोग कर सकते हैं:
val f = Y (fn f => fn n => if n = 0 then 1 else n * f (n-1))
मेरा प्रश्न है
datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
अब आप आसानी से y-Combinator परिभाषित कर सकते हैं: क्या एसएमएल में वाई-संयोजक को लागू करने के अन्य तरीके हैं?
आप नहीं कर सकते हैं, के बाद से स्वयं अनुप्रयोग है कि के लिए आवश्यक एक पुनरावर्ती प्रकार की आवश्यकता है। –
@NaCl अच्छी तरह से, आप कर सकते हैं, क्योंकि "मजेदार" एक 'व्युत्पन्न' का व्युत्पन्न रूप है, लेकिन यह 'मजेदार' का उपयोग करने के बराबर होगा। – matt