سؤال

(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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top