مخطط / مضرب:أضعاف مع منطقية
-
13-12-2019 - |
سؤال
(foldr + 0 '(1 2 3 4))
المرتجعات 10
وهو ما أتوقع ، ولكن
(foldr and false '(true true false))
يعطيني الخطأ
and: expected an open parenthesis before and, but found none
foldr
يأخذ وظيفة(الذي يأخذ معلمتين ، لأن لدي قائمة واحدة) ، وحالة قاعدة ، وقائمة (ق).أتوقع أن يعود السطر الثاني من التعليمات البرمجية صحيحا إذا كانت القائمة تحتوي على أكثر من صفر قيم منطقية وكلها صحيحة ، وهذه هي الطريقة التي اعتقدت أنها ستعمل بها.ولكن على ما يبدو لا.
المحلول
And
هو شكل خاص ولن يعمل معه foldr
, ، الذي يتوقع أ الإجراء كما الحجة الثانية.جرب هذا بدلا من ذلك:
(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case
بديل آخر لهذه الحالة بالذات هو استخدام andmap
:
(andmap identity '(#t #t #f))
نصائح أخرى
في نظام مخطط, and
يتم تعريفه عادة على أنه شكل ماكرو أو خاص وليس كإجراء ، وهذا هو السبب في أنه لا يعمل:
#;1> +
#<procedure C_plus>
#;2> and
Error: unbound variable: and
لا تنتمي إلى StackOverflow