Esquema / raqueta: pliegue con booleans
-
13-12-2019 - |
Pregunta
(foldr + 0 '(1 2 3 4))
devuelve 10
, que es lo que espero, pero
(foldr and false '(true true false))
me da el error
and: expected an open parenthesis before and, but found none
foldr
toma una función (que toma dos parámetros, ya que tengo una lista), y un caso base, y una lista (s).Espero que mi segunda línea de código devuelva verdadera si la lista tiene más de cero booleans y son verdaderos, y así es como pensé que funcionaría.Pero aparentemente no.
Solución
And
es una forma especial y no funciona con foldr
, que está esperando un procedimiento como su segundo argumento.Intenta esto en lugar:
(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case
Otra alternativa para este caso en particular estaría usando andmap
:
(andmap identity '(#t #t #f))
Otros consejos
En un sistema de esquemas, generalmente generalmente se define como una macro o forma especial y no como un procedimiento, por lo que no funciona:
#;1> +
#<procedure C_plus>
#;2> and
Error: unbound variable: and
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow