Схема / Ракетка: сложить с логическими значениями - PullRequest
4 голосов
/ 14 марта 2012
(foldr + 0 '(1 2 3 4))

возвращает 10, что я и ожидал, но

(foldr and false '(true true false))

дает мне ошибку

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

foldr принимает функцию (которая принимает два параметра, так как у меня есть один список), и базовый случай, и список (ы).Я ожидаю, что моя вторая строка кода вернет true, если список содержит больше нуля, и они все верны, и я думал, что это будет работать.Но, видимо, нет.

Ответы [ 2 ]

7 голосов
/ 14 марта 2012

And - это специальная форма, которая не будет работать с foldr, который ожидает процедуру в качестве второго аргумента. Попробуйте вместо этого:

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

Другой альтернативой для этого конкретного случая будет использование andmap:

(andmap identity '(#t #t #f))
0 голосов
/ 14 марта 2012

В системе Scheme and обычно определяется как макрос или специальная форма, а не как процедура, поэтому он не работает:

#;1> +
#<procedure C_plus>
#;2> and

Error: unbound variable: and
...