استمرار تمرير النمط في المخطط؟
-
15-11-2019 - |
سؤال
لقد واجهت هذا الرمز على ويكيبيديا:
(define (pyth x y k)
(* x x (lambda (x2)
(* y y (lambda (y2)
(+ x2 y2 (lambda (x2py2)
(sqrt x2py2 k))))))))
تقول المقالة أن هذا الرمز هو إصدار استمرار المرور لجزء آخر من التعليمات البرمجية:
(define (pyth x y)
(sqrt (+ (* x x) (* y y))))
ومع ذلك فأنا في حيرة من أمري:كيف يعمل ذلك حتى؟كيف تضرب رقمًا في لامدا هنا؟ (* x x (lambda ...))
المحلول
في مثال ويكيبيديا، *
لا يعني نفس الشيء *
في المثال التقليدي.
سأعيد كتابة مثال ويكيبيديا على النحو التالي:
(define (pyth x y k)
(cps-* x x (lambda (x2)
(cps-* y y (lambda (y2)
(cps-+ x2 y2 (lambda (x2py2)
(cps-sqrt x2py2 k))))))))
وفي هذا الشكل كل من cps-xxx
تقوم الوظائف بتنفيذ العملية المشار إليها ثم تمرير النتيجة إلى الوسيطة الأخيرة.يمكنك تسميتها هكذا:
(pyth 2 3 display)
الذي سيضرب 2 و 3، ويعطي 6، ثم يمرر 6 إلى display
.(في الواقع قد ترغب في تمرير النتيجة إلى ملف cps-display
التي عرضت وسيطتها (وسيطاتها) الأولية ثم تم استدعاؤها آخر الوظيفة المحددة كمعلمة أخيرة).
لا تنتمي إلى StackOverflow