سؤال

لذلك أعتقد أنني أفهم استمرار الآن، على الأقل على مستوى ما، بفضل مخطط المجتمع Wiki. و تعلم مخطط في أيام FixNum.

ولكن أود المزيد من الممارسات - وهذا هو، رمز المثال الذي يمكنني العمل به في رأسي (بفضل مفاعل، لذلك ليس هناك أشياء غريبة صرف انتباه عن المفهوم).

خاصة, ، أود أن أعمل من خلال المزيد من المشاكل التي تتمتع بالمستمرات التي تستأنف و / أو coroutines، بدلا من استخدامها فقط للخروج من حلقة أو أيا كان (وهو أمر واضح إلى حد ما).

على أي حال، إذا كنت تعرف برامج تعليمية جيدة إلى جانب تلك التي ربطتها أعلاه، أو إذا كنت تهتم بنشر شيء كتبته سيكون تمرينا جيدا، فسأكون ممتنا للغاية!

هل كانت مفيدة؟

المحلول

نعم، يمكن أن تكون المستمرات الانحناء الذهن. إليك لغز جيد وجدت لفترة طويلة - حاول معرفة ما هو مطبوع ولماذا:

(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. هذه المرة، ك الآن ملزمة بالاستمرار وصلنا في ب
  5. الرقم 1 هو مكتوب مرة أخرى إلى الشاشة
  6. يتم إرجاع استمرار الحالي، وهو ما هو متابعة في النقطة ب، إلى ك، أي استمرار آخر (ولكن مختلف) إلى نقطة أخرى ب
  7. بمجرد أن نعود في الاستمرار الأصلي، من المهم أن نلاحظ أن هنا لا تزال مرتبطة
  8. الرقم 2 مكتوب إلى الشاشة
  9. يتم إرجاع استمرار الحالي، وهو الاستمرار في النقطة C، إلى K، الذي يعود إلى
  10. هذه المرة، K ملزمة الآن إلى استمرار حصلنا عليه
  11. الرقم 1 هو مكتوب مرة أخرى إلى الشاشة
  12. يتم إرجاع استمرار الحالي، وهو ما يستمر في النقطة ب، إلى ك، الذي يعود إلى ج
  13. الرقم 3 مكتوب إلى الشاشة
  14. إنتهيت

لذلك، الإخراج الصحيح هو 11213. وبعد النقطة الأكثر شيوعا التي وضعت في نص جريء - من المهم ملاحظة أنه عند استخدام استمرار "إعادة تعيين" قيمة K أنه لا يؤثر على قيمة K مرة أخرى في الاستمرار الأصلي. بمجرد أن تعرف أنه يصبح أسهل في فهمه.

نصائح أخرى

دورة برمجة جامعة براون بالطبع مشكلة تعيين على المستمرات متاح للعامة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top