Pergunta

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

retorna 10 que é o que eu espero, mas

(foldr and false '(true true false))

me dá o erro

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

foldr recebe uma função (que aceita dois parâmetros, já que tenho uma lista), um caso base e uma(s) lista(s).Espero que minha segunda linha de código retorne verdadeiro se a lista tiver mais de zero booleanos e todos forem verdadeiros, e foi assim que pensei que funcionaria.Mas aparentemente não.

Foi útil?

Solução

And é um formulário especial e não funciona com foldr, que espera um procedimento como seu segundo argumento.Em vez disso, tente isto:

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

Outra alternativa para este caso específico seria usar andmap:

(andmap identity '(#t #t #f))

Outras dicas

Em um sistema de esquema, and normalmente é definido como uma macro ou forma especial e não como um procedimento, e é por isso que não funciona:

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

Error: unbound variable: and
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top