2009-04-16 15 views
5

तो मेरा मानना ​​है कि मैं कम से कम कुछ स्तर पर निरंतरता को समझता हूं, community scheme wiki और Learn Scheme in Fixnum Days के लिए धन्यवाद।उत्तीर्ण उदाहरण कोड की तलाश: निरंतरता!

लेकिन मुझे और अधिक अभ्यास चाहिए - यानी, उदाहरण के लिए कोड मैं अपने सिर में काम कर सकता हूं (अधिमानतः प्रदूषित, इसलिए अवधारणा से विचलित करने के लिए अपर्याप्त सामान नहीं है)।

विशेष रूप, मैं के रूप में सिर्फ उन्हें उपयोग करने के लिए एक पाश या जो कुछ भी (जो काफी सीधा है) से बाहर निकलने के लिए विरोध किया, निरंतरता है कि फिर से शुरू और/या coroutines के साथ और अधिक समस्याओं के माध्यम से काम करना चाहते हैं।

वैसे भी, अगर आप लोगों के अलावा अच्छा ट्यूटोरियल का पता है कि मैं ऊपर लिंक, या यदि आप कुछ आपके द्वारा लिखी गई है कि एक अच्छा व्यायाम हो जाएगा पोस्ट करने के लिए परवाह था, मैं बहुत सराहना की होगी!

उत्तर

5

हाँ, निरंतरताएं बहुत दिमागी झुकाव हो सकती हैं।

(define (mondo-bizarro) 
    (let ((k (call/cc (lambda (c) c)))) ; A 
    (write 1) 
    (call/cc (lambda (c) (k c))) ; B 
    (write 2) 
    (call/cc (lambda (c) (k c))) ; C 
    (write 3))) 

(mondo-bizarro) 

यह कैसे काम करता की व्याख्या (विफल होता है!):

  1. पहले call/cc भंडार क्या मुद्रित है यह पता लगाने की कोशिश करते हैं और यही कारण है कि - यहाँ एक अच्छा पहेली मैंने पाया कुछ समय वापस आ गया है यह अपनी खुद की निरंतरता देता है और इसे k में संग्रहीत करता है।
  2. संख्या 1 स्क्रीन पर लिखा गया है।
  3. वर्तमान निरंतरता है, बिंदु बी पर जारी रखने के लिए है जो है, जो एक
  4. इस समय में वापस लौटने k में लौट आता है,, कश्मीर अब निरंतरता हम बी
  5. पर मिला संख्या 1 फिर से लिखा है के लिए बाध्य है स्क्रीन
  6. वर्तमान निरंतरता है, बिंदु बी पर जारी रखने के लिए है जो, k के लिए वापस आ गया है, जो एक और (लेकिन अलग) एक और बिंदु बी
  7. एक बार जब हम मूल निरंतरता में वापस आ गए हैं करने के लिए जारी रखने के लिए है, यह यह ध्यान रखना महत्वपूर्ण है कि यहां के अभी भी
  8. से जुड़ा हुआ है
  9. संख्या 2 स्क्रीन
  10. वर्तमान निरंतरता है, बिंदु सेल्सियस पर जारी रखने के लिए है जो करने के लिए लिखा है, जो एक
  11. इस समय में वापस लौटने k में लौट आता है,, कश्मीर अब निरंतरता हम पर मिल गया के लिए बाध्य है सी
  12. संख्या 1 स्क्रीन
  13. वर्तमान निरंतरता है, बिंदु बी पर जारी रखने के लिए है जो करने के लिए फिर से लिखा है, जो सी
  14. संख्या 3 रिटर्न स्क्रीन पर लिखा है k में लौट आता है,
  15. And you're done

इसलिए, सही आउटपुट 11213 है। सबसे आम चिपकने वाला बिंदु मैंने बोल्ड टेक्स्ट में रखा है - यह ध्यान रखना महत्वपूर्ण है कि जब आप के के मान को 'रीसेट' करने के लिए निरंतरता का उपयोग करते हैं, तो यह मूल निरंतरता में के पीछे के मूल्य को प्रभावित नहीं करता है। एक बार जब आप जानते हैं कि समझना आसान हो जाता है।

+0

हम्म, हाँ, यह मेरे दिमाग को नष्ट कर रहा है। सीएसआई का कहना है कि परिणाम 11213 है, लेकिन मैं केवल '112' को समझ सकता हूं ... मुझे कुछ याद आना चाहिए! –

+1

मैंने एक स्पष्टीकरण जोड़ा - अगर आप वाकई अटक गए हैं तो इसे पढ़ें। –

+0

धन्यवाद, बोल्ड पॉइंट बिल्कुल ठीक था जहां मैं उलझन में था। मुझे दोबारा कोशिश करने दो ... :) –

4

ब्राउन विश्वविद्यालय के प्रोग्रामिंग भाषा पाठ्यक्रम में problem set on continuations सार्वजनिक रूप से उपलब्ध है।

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