यह "W" combinator के रूप में जाना जाता है:
import Control.Monad
import Control.Monad.Instances
import Control.Applicative
f = join g -- = Wg (also, join = (id =<<))
= (g `ap` id) -- \x -> g x (id x) = SgI
= (<*> id) g -- = CSIg
= g =<< id -- \x -> g (id x) x
= id =<< g -- \x -> id (g x) x
S,K,I combinators में से एक बुनियादी सेट कर रहे हैं; B,C,K,W एक और कर रहे हैं - आप को रोकने के लिए मिल गया है कहीं(पुन: अपने "कोई लैम्ब्डा अभिव्यक्ति" टिप्पणी):
_B = (.) -- _B f g x = f (g x) = S(KS)K
_C = flip -- _C f x y = f y x = S(S(K(S(KS)K))S)(KK)
_K = const -- _K x y = x
_W = join -- _W f x = f x x = CSI = SS(KI) = SS(SK)
_S = ap -- _S f g x = f x (g x) = B(B(BW)C)(BB) = B(BW)(BBC)
= (<*>) -- from Control.Applicative
_I = id -- _I x = x = WK = SKK = SKS = SK(...)
{-
Wgx = gxx
= SgIx = CSIgx
= Sg(KIg)x = SS(KI)gx
= gx(Kx(gx)) = gx(SKgx) = Sg(SKg)x = SS(SK)gx
-- _W (,) 5 = (5,5)
-- _S _I _I x = x x = _omega x -- self-application, untypeable
-}
स्रोत
2012-06-15 12:49:59
मुझे लगता है कि तुम्हारा मतलब 'च = g' – dflemstr
में शामिल होने आप व्याख्या कर सकते हैं क्यों मेरा उत्तर 'प्वाइंट फ्री 'नहीं होगा? मुझे लगता है मुझे एक गलतफहमी है। – pmr
@dflemstr: ओह; मैंने अपना जवाब अपडेट कर लिया है। धन्यवाद! – ehird