2011-06-10 19 views
5

साथ संख्या उत्पन्न करने के लिए कोड यहाँ इस तरह संख्या उत्पन्न कर सकते हैं की एक बेहतर स्पष्टीकरण [1 -2 3 -4 5 -6 7 -8 9 -10 ...]धारा का उपयोग कर बारी संकेत

(define (integers-starting-from n) 
    (cons-stream n (stream-map - (integers-starting-from (+ n 1))))) 

मैं समझ में नहीं आता कि यह वैकल्पिक संकेत उत्पन्न करता है। क्या कोई मुझे कृपया इसे देखने में मदद करने के लिए एक बेहतर विवरण दे सकता है?

आप मिट-स्कीम में कोड चला सकते हैं। इस तरह यह

उत्तर

7

आइए थिंक:

बहुत पूर्णांकों का एक अनंत धारा उत्पन्न करते हैं, हम कुछ इस तरह चाहते हैं

(define (integers-starting-from n) 
    (cons-stream n (integers-starting-from (+ n 1)))) 

यह क्या करना चाहते हैं (साथ शुरू करने के लिए एन = 1):

(+1 +2 +3 +4 +5 ...) 

अब, चलो मान लेते हैं कि हम दूसरे स्थान से सभी तत्वों को ले जाने, और उनके संकेत को उलटने:

(+1 -2 -3 -4 -5 ...) 

के तीसरे स्थान के लिए और पर भी ऐसा ही करते हैं:,

(+1 -2 +3 -4 -5 ...) 
(+1 -2 +3 -4 +5 ...) 

हम देख सकते हैं, तो प्रत्येक के बाद:

(+1 -2 +3 +4 +5 ...) 

दोहराएँ दो बार अधिक, हर बार अगले जगह से शुरू तत्व हम इसके पूर्णांक (शेष धारा के संकेत को बदलने) के बाद, पूर्णांक पूर्णांक को जोड़ते हैं, हम वही प्राप्त करेंगे जो आप चाहते थे - वैकल्पिक संकेतों के साथ पूर्णांक की एक धारा। प्रत्येक बार जब हम stream-map- के साथ अपने स्ट्रीम को उलटा करने के लिए शेष स्ट्रीम पर stream-map का उपयोग करते हैं, जहां "शेष स्ट्रीम" केवल (+ n 1) से शुरू होने वाली धारा है।

इसे cons-stream के साथ सभी को लपेटें और आपको यह होना चाहिए।

+0

धन्यवाद कुछ के लिए देख रहे हैं बहुत ज्यादा। यह वही है जो मैं ढूंढ रहा हूं। –

1
(cons-stream n (stream-map - (integers-starting-from (+ n 1))))) 

दो बातें कर रही है, सबसे पहले यह cons-stream मूल्य n और कौन-सा - की monadic मामले नकारना है धारा के उलट होने वाला मूल्य प्रपत्र (stream-map - (integers-starting-from (+ n 1))) का मूल्यांकन है। इस प्रकार आपका वैकल्पिक पैटर्न।

समारोह नाम यह आप प्रकट होता है से अधिक की तरह इस

(define (integers-starting-from n) 
    (cons-stream n (integers-starting-from (+ n 1)))) 
संबंधित मुद्दे