Вопрос

(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, если в списке больше нуля логических значений, и все они верны, и я думал, что это сработает именно так.Но, по-видимому, нет.

Это было полезно?

Решение

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