2011-01-04 13 views
9
f :: Integer -> Integer -> [Integer] 
f i n = n : f (i+2) (n+i) 

कोई मुझे बता सकता है कि यह क्या करता है। मुझे पता है कि यह लौटाता है [0,1,4,9,16 ..] लेकिन मुझे नहीं पता कि का मतलबक्या कोई मुझे निम्नलिखित हास्केल अभिव्यक्ति

+1

आपके पास आपके उदाहरण में वाक्यविन्यास त्रुटियां हैं ... – sth

+5

+1 * यह * होमवर्क प्रश्न पूछने का तरीका है। – luqui

उत्तर

10

: "विपक्ष" ऑपरेटर है और एक नई सूची बनाता है जिसका सिर बाईं ओर का मूल्य है ऑपरेटर का और किसकी पूंछ ऑपरेटर के दाईं ओर मूल्य है। इस प्रकार 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]) की एक सूची देता है। यह एक अवधारणा है जिसे आप परिचित हो जाएंगे क्योंकि आप हास्केल और अन्य कार्यात्मक प्रोग्रामिंग भाषाओं में अधिक गहराई में आते हैं।

5

आपके प्रश्न में कोड कुछ भी नहीं करता है क्योंकि इसमें एक प्रकार त्रुटि और एक वाक्यविन्यास त्रुटि है।

f :: Integer -> Integer --> [Integer] 

आप पिछले बिट पर प्रकाश डाला से देख सकते हैं एक टिप्पणी क्योंकि -- हास्केल में एक टिप्पणी शुरू होता है। नतीजतन, घोषित प्रकार fInteger -> 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) का परिणाम है।

संबंधित मुद्दे