haskell - Am I using sound equational reasoning about a definition of filter in terms of foldr? -
अच्छा, यह foldr का उपयोग करते हुए फिल्टर फ़ंक्शन की परिभाषा है:
myFilter p xs = गुना कदम [] एक्स जहां चरण x ys | P x = x: ys | अन्यथा = ys तो उदाहरण के लिए मान लें कि मुझे यह फ़ंक्शन है:
myFilter odd [1,2,3,4]< / पूर्व>तो यह हो जाएगा:
गुना कदम [] [1,2,3,4]और यह होगा < / P>
चरण 1 (गुना कदम [] [2,3,4])और यह होगा
चरण 1 (चरण 2 (कदम चरण [] [3,4]))और यह होगा
चरण 1 (चरण 2 (चरण 3 ( [चरण 4 (चरण 3 (चरण 4) (फ़ोल्ड चरण [] [4])))और यह होगा
चरण 1 (चरण 2 (चरण 3 [ ] []))))और
फ़ोल्ड चरण [] []है[]ऐसा:चरण 1 (चरण 2 (चरण 3 (चरण 4 [])))अब हम वास्तव में
stepफ़ंक्शन में आएं।
यहां परचरणकी परिभाषा हैmyFilterफ़ंक्शन, ऊपर से:चरण x ys | P x = x: ys | अन्यथा = ysभी, मैं आपको याद दिलाता हूं कि
pवास्तव में हमारे उदाहरण मेंअजीबफ़ंक्शन है।ठीक है, फिर से, हम यहां हैं:
चरण 1 (चरण 2 (चरण 3 (चरण 4 [])))और
x = 4सबसे भीतरीचरणमें, और4अजीब नहीं है, इसलिए हम वापसys , जो कि[]है, अब हम इसे प्राप्त करते हैं:
चरण 1 (चरण 2 (चरण 3 [])) < / कोड>अब, सबसे भीतरी
चरण,x = 3में, और3अजीब है, इसलिए हमx: ys, जो3: []है, जो[3]है, और अब हम प्राप्त करते हैं:चरण 1 (चरण 2 [3])और अब, आंतरिक
< प्री>चरण,x = 2में, और2अजीब नहीं है, इसलिए हमysवापस करते हैं, जो कि[3]है, इसलिए अब हम प्राप्त करेंगे:चरण 1 [3]और अब,
x = 1, और1अजीब है, इसलिए हमx: ysवापस आते हैं, जो1: [3]है, जो[1,3]है।समाप्ति: -)।
क्या मैं अपनी सारी चाल में हूं?
बहुत बहुत धन्यवाद: -)।ps
myFilterकी परिभाषा पुस्तक से है, अध्याय 4 में।
यह पहले पढ़ने में मुझे सही दिखता है।
हालांकि याद रखने के लिए महत्वपूर्ण बात यह है कि आलसी मूल्यांकन प्राप्त करने के लिए, हास्केल वास्तव में अन्य तरीकों से देखेगा। दूसरे शब्दों में, वास्तविक अनुक्रम अधिक है
चरण 1 (चरण 2 (चरण 3 (चरण 4 []))) हो जाता है
चरण 1 & lt; block1 & gt; जो हो जाता है
[1, तब अगर आप अगली खींचने का प्रयास करते हैं
जो
[1, चरण 2 हो जाता है
और [1, चरण 3 & lt; ब्लॉक 3 & gt;]
जो हो जाता है
[1, 3, & lt; ब्लॉक 3 & gt;]
आदि। यह समझने में मुझे कुछ समय लगा। यह मुझे प्रतिवाद था कि जब से folds को "अंदर से" से मूल्यांकन किया जाता है, परन्तु foldl का मूल्यांकन "बाहर" से किया जाता है जो कि foldr आलसी होगा (जो यह है), जबकि foldl सख्त है लेकिन अगर आप इसके बारे में सोचते हैं कि मैंने ऊपर उल्लिखित तरीके से, यह समझ में आता है (मुझे, वैसे भी)।
Comments
Post a Comment