जे , 16 11 बाइट्स
(+$:)^:=1+?
इसे ऑनलाइन आज़माएं!
व्याख्या
टी एल; डॉ 1+? । मर रोल करता है, (+$:)^:=केवल तब ही दोहराता है जब यह इनपुट के बराबर होता है।
समारोह 4 क्रियाओं की एक ट्रेन है:
┌─ +
┌───┴─ $:
┌─ ^: ─┴─ =
│
──┤ ┌─ 1
└──────┼─ +
└─ ?
एक ट्रेन है जब 2 या अधिक क्रियाओं को समतल किया जाता है। यहाँ, उत्तर प्रपत्र का हैf g h j :
(+$:)^:= 1 + ?
f g h j
तथाकथित "4-ट्रेन" को एक हुक और एक कांटा के रूप में रखा गया है:
f g h j ⇔ f (g h j)
इस प्रकार, उत्तर इसके बराबर है:
(+$:)^:= (1 + ?)
हुक: (f g) xऔरx (f g) y
दो क्रियाओं का एक विमुद्रीकरण (एक-तर्क) हुक, एक तर्क दिया x, निम्नलिखित समानता रखती है:
(f g) x ⇔ x f (g x)
उदाहरण के लिए, का (* -) 5मूल्यांकन करता है5 * (- 5) , जो मूल्यांकन करता है _25।
इसका मतलब है कि हमारी 4-ट्रेन, हुक fऔर (g h j), के बराबर है:
(f (g h j)) x ⇔ x f ((g h j) x)
लेकिन fयहाँ क्या करता है? पॉवर संयोजन (+$:)^:=का उपयोग करके दो क्रियाओं का एक संयोजन है : एक और हुक ( ) और एक क्रिया ( )। नोट है कि यहाँ है dyadic -यह दो तर्क है ( और )। इसलिए हमें यह देखना होगा कि कैसे व्यवहार किया जाए। शक्ति संयोजन एक क्रिया और या तो एक क्रिया या एक संज्ञा लेता है (एक संज्ञा सिर्फ डेटा का एक टुकड़ा है) और कई बार लागू होता है। उदाहरण के लिए, ले लो । निम्नलिखित समानताएं रखती हैं:^:(+$:)=fx(g h j) x^:f^:ofof oo = 3
(f^:3) x ⇔ f (f (f x))
x (f^:3) y ⇔ x f (x f (x f y))
यदि oएक क्रिया है, तो शक्ति संयुग्मन केवल oतर्कों पर मूल्यांकन करेगा और पुनरावृत्ति गणना के रूप में संज्ञा परिणाम का उपयोग करेगा।
हमारे क्रिया के लिए, oहै =, समानता क्रिया। यह 0विभिन्न तर्कों के लिए और 1समान तर्कों के लिए मूल्यांकन करता है । हम (+$:)समान तर्क के लिए एक बार हुक दोहराते हैं और अलग-अलग लोगों के लिए समय नहीं देते हैं। स्पष्टीकरण के लिए अंकन की आसानी के लिए, चलो y ⇔ ((g h j) x)। याद रखें कि हमारा शुरुआती हुक इसके बराबर है:
x (+$:)^:= ((g h j) x)
x (+$:)^:= y
संयोजन का विस्तार, यह हो जाता है:
x ((+$:)^:(x = y)) y
अगर xऔर yसमान हैं, तो यह बन जाता है:
x (+$:)^:1 y ⇔ x (+$:) y
अन्यथा, यह बन जाता है:
x (+$:)^:0 y ⇔ y
अब, हमने monadic forks को देखा है। यहाँ, हमारे पास एक डाईडिक कांटा है:
x (f g) y ⇔ x f (g y)
इसलिए, जब xऔर yजैसा हो, हमें मिलता है:
x (+$:) y ⇔ x + ($: y)
क्या है $:? यह पूरी क्रिया को संदर्भित करता है और पुनरावृत्ति की अनुमति देता है। इसका मतलब यह है कि, जब xऔर y are the same, we apply the verb toy and addx` इसके लिए।
फोर्क्स: (g h j) x
अब, भीतर का कांटा क्या करता है? यह yहमारे आखिरी उदाहरण में था। तीन क्रियाओं के एक अद्वैत कांटे के लिए, एक तर्क दिया जाता है x, निम्नलिखित तुल्यता पकड़:
(g h j) x ⇔ (g x) h (j x)
यह अगले उदाहरण के लिए, हम क्रियाओं नाम दिया SUM, DIVIDEऔर LENGTHहै, जो कि आप क्या लगता है वे हो सकता है। यदि हम तीनों को एक कांटा बनाते हैं, तो हम प्राप्त करते हैं:
(SUM DIVIDE LENGTH) x ⇔ (SUM x) DIVIDE (LENGTH x)
यह कांटा औसत के लिए मूल्यांकन करता है x(मानकर xसंख्याओं की एक सूची है)। जे में, हम वास्तव में इसे उदाहरण के रूप में लिखेंगे +/ % #।
कांटे के बारे में एक आखिरी बात। जब सबसे बाईं ओर "टाइन" (ऊपर हमारे प्रतीकात्मक मामले में g) एक संज्ञा है, तो इसे उस मान को लौटाने वाले एक स्थिर फ़ंक्शन के रूप में माना जाता है।
इस सब जगह के साथ, अब हम उपरोक्त कांटा समझ सकते हैं:
(1 + ?) x ⇔ (1 x) + (? x)
⇔ 1 + (? x)
?[ 0 , x )[ १ , x ]
यह सब एक साथ डालें
इन सभी बातों को देखते हुए, हमारी क्रिया इसके समकक्ष है:
((+$:)^:=1+?) x ⇔ ((+$:)^:= 1 + ?) x
⇔ ((+$:)^:= (1 + ?)) x
⇔ x ((+$:)^:=) (1 + ?) x
⇔ x ((+$:)^:=) (1 + (? x))
⇔ x (+$:)^:(x = (1 + (? x))
(let y = 1 + (? x))
if x = y ⇒ x + $: y
otherwise ⇒ y
यह वांछित कार्यक्षमता व्यक्त करता है।