f :: Integer -> Integer -> [Integer]
f i n = n : f (i+2) (n+i)
कोई मुझे बता सकता है कि यह क्या करता है। मुझे पता है कि यह लौटाता है [0,1,4,9,16 ..] लेकिन मुझे नहीं पता कि का मतलबक्या कोई मुझे निम्नलिखित हास्केल अभिव्यक्ति
f :: Integer -> Integer -> [Integer]
f i n = n : f (i+2) (n+i)
कोई मुझे बता सकता है कि यह क्या करता है। मुझे पता है कि यह लौटाता है [0,1,4,9,16 ..] लेकिन मुझे नहीं पता कि का मतलबक्या कोई मुझे निम्नलिखित हास्केल अभिव्यक्ति
:
"विपक्ष" ऑपरेटर है और एक नई सूची बनाता है जिसका सिर बाईं ओर का मूल्य है ऑपरेटर का और किसकी पूंछ ऑपरेटर के दाईं ओर मूल्य है। इस प्रकार 0 : [1, 2, 3]
सूची [0, 1, 2, 3]
है।
चेक इस समारोह के व्यवहार, f 1 0
का मूल्यांकन इस प्रकार से:
f 1 0 = 0 : f 3 1
अर्थात f 1 0
एक नया सिर पर 0
से मिलकर सूची और सूची f 3 1
अपनी पूंछ के रूप में द्वारा लौटाए बनाने का परिणाम है।
f 3 1 = 1 : f 5 4
अर्थात f 3 1
एक नया सिर पर 1
से मिलकर सूची और सूची f 5 4
अपनी पूंछ के रूप में द्वारा लौटाए बनाने का परिणाम है: इसी तरह, f 3 1
इस प्रकार है।
इस प्रकार, फ़ंक्शन दोबारा एक सूची बनाता है। इसके अलावा, यह असीम पूंछ-पुनरावर्ती है (क्योंकि इसकी कोई समाप्ति स्थिति नहीं है) और इस प्रकार परिणामस्वरूप असीमित लंबी सूची होगी।
प्रारंभिक लाइन, f :: Integer -> Integer -> [Integer]
का सवाल है, यह इंगित करता है कि f
एक समारोह है कि दो पूर्णांकों (Integer -> Integer
) लेता है और एक ([Integer]
) पूर्णांकों की सूची देता है। कड़ाई से बोलते हुए, f
एक पूर्णांक (Integer
) लेता है और एक और फ़ंक्शन देता है जो एक पूर्णांक लेता है और फ़ंक्शन करी के परिणामस्वरूप पूर्णांक (Integer -> [Integer]
) की एक सूची देता है। यह एक अवधारणा है जिसे आप परिचित हो जाएंगे क्योंकि आप हास्केल और अन्य कार्यात्मक प्रोग्रामिंग भाषाओं में अधिक गहराई में आते हैं।
आपके प्रश्न में कोड कुछ भी नहीं करता है क्योंकि इसमें एक प्रकार त्रुटि और एक वाक्यविन्यास त्रुटि है।
f :: Integer -> Integer --> [Integer]
आप पिछले बिट पर प्रकाश डाला से देख सकते हैं एक टिप्पणी क्योंकि --
हास्केल में एक टिप्पणी शुरू होता है। नतीजतन, घोषित प्रकार f
Integer -> Integer
है, जो गलत है। इस परिवर्तन को ठीक करने के लिए -->
से ->
।
f i n = n : f (i+2) (n+i]
यहाँ आप एक उद्घाटन (
और उसके बाद एक बंद ]
है। जाहिर है कि यह गलत है। इस परिवर्तन को ठीक करने के लिए (n+i]
से (n+i)
।
कि कि यह हो जाने पर, यहाँ क्या तय कोड करता है:
:
सूची प्रकार के लिए एक निर्माता है। x : xs
वह सूची है जिसमें x
है और इसकी पूंछ के रूप में xs
है। n : f (i+2) (n+i)
को n : (f (i+2) (n+i))
के रूप में पार्स किया गया है ((n : f) (i+2) (n+1)
जैसा कि आप मानते हैं)। तो यह एक सूची बनाता है जिसका सिर n
है और इसकी पूंछ f (i+2) (n+1)
का परिणाम है।
आपके पास आपके उदाहरण में वाक्यविन्यास त्रुटियां हैं ... – sth
+1 * यह * होमवर्क प्रश्न पूछने का तरीका है। – luqui