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

Popular posts from this blog

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

asp.net mvc - Dynamically Generated Ajax.BeginForm -

Debug on symbian -