K
के साथ समस्या सभी आदिम संयोजकों के साथ यह है कि आप इसे अपने आप नहीं मान सकते हैं। आदिम संयोजक कार्यात्मक प्रोग्रामिंग के मौलिक बिल्डिंग ब्लॉक हैं। उन्हें काम पर देखने के लिए आपको एक उचित संदर्भ की आवश्यकता है। चुनौती इस संदर्भ को ग्रोक करना है, यदि आप कार्यात्मक प्रतिमान के लिए नए हैं।
यहां एक "सामान्य संदर्भ" है: Option
।
// the option type
const Option = {
some: Symbol.for("ftor/Option.some"),
none: Symbol.for("ftor/Option.none"),
of: x => factory(Option.some) (x),
cata: pattern => o => pattern[o.tag](o.x),
fold: f => g => o => Option.cata({[Option.some]: f, [Option.none]: g}) (o),
map: f => o => Option.fold(x => Option.of(f(x))) (K(o)) (o)
// ^^^^
}
// a generic map function
const map = type => f => o => type.map(f) (o);
// functor factory
const factory = tag => value => (
{x: value === undefined ? null : value, tag: tag}
);
// auxiliary functions
const K = x => y => x;
const sqr = x => x * x;
// a few data to play around
const o = factory(Option.some) (5);
const p = factory(Option.none)();
// and run
let r1 = map(Option) (sqr) (o);
let r2 = map(Option) (sqr) (p);
console.log("map over o", r1);
console.log("map over p", r2);
K
इस कार्यान्वयन में क्या करता है: Option
प्रकार के उदाहरण है जब एक समारोह के लिए आवेदन किया मूल्यों null
हो सकता है कि की तरह हैं, लेकिन कभी नहीं एक त्रुटि फेंक? के महत्वपूर्ण लाइन जांच:
f => o => Option.fold(x => Option.of(f(x))) (K(o)) (o)
Option.fold
दो कार्यों की उम्मीद है। पहला पारित कार्य x => Option.of(f(x))
some
केस के लिए है (एक मान है)। none
मामले के लिए दूसरा K(o)
(कोई मूल्य नहीं है)। आइए याद रखें कि K
दो तर्क K = x => y => {return x}
की अपेक्षा करता है। K(o)
o
से x
असाइन करता है। कोई फर्क नहीं पड़ता कि दूसरे तर्क के रूप में क्या पारित किया गया है, K
हमेशा y
को अनदेखा कर देगा और इसके बजाय x
लौटाएगा।
लेकिन o
K(o)
अभिव्यक्ति में प्रतिनिधित्व करता है? यह Option.none
का प्रतिनिधित्व करता है जो कि मूल्य की अनुपस्थिति है। तो जब कोई f
none
पर 0xपर नक्शा मैप करने का प्रयास करता है, तो f
K
पर दूसरे तर्क के रूप में गुजरता है, इससे कोई फर्क नहीं पड़ता।
http://cs.stackexchange.com/questions/55441/what-is-the-purpose-of-the-ski-combinator-calculusor-even-lambda-calculus- wha –
यह सीएल फ़ंक्शन [स्थिरता] (http://clhs.lisp.se/Body/f_cons_1.htm) जैसा दिखता है जो कभी-कभी काफी उपयोगी होता है। – Sylwester
करीबी भाषाओं में, जब भी आप पहली तर्क को अनदेखा करने के लिए कॉलबैक चाहते हैं तो आप इसका उपयोग करेंगे। – Bergi