Esquema/Raquete:Dobre com booleanos
-
13-12-2019 - |
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.
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