Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scheme/Racket: Fold with booleans

(foldr + 0 '(1 2 3 4))

returns 10 which is what I expect, but

(foldr and false '(true true false))

gives me the error

and: expected an open parenthesis before and, but found none

foldr takes a function (which takes two parameters, since I have one list), and a base case, and a list(s). I expect my second line of code to return true if the list has more than zero booleans and they are all true, and that is how I thought it would work. But apparently not.

like image 789
newprogrammer Avatar asked Mar 14 '12 00:03

newprogrammer


1 Answers

And is a special form and won't work with foldr, which is expecting a procedure as its second argument. Try this instead:

(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case

Another alternative for this particular case would be using andmap:

(andmap identity '(#t #t #f))
like image 161
Óscar López Avatar answered Nov 14 '22 17:11

Óscar López