Schema / Racket: piega con booleani
-
13-12-2019 - |
Domanda
(foldr + 0 '(1 2 3 4))
.
restituisce 10
che è ciò che mi aspetto, ma
(foldr and false '(true true false))
.
mi dà l'errore
and: expected an open parenthesis before and, but found none
.
foldr
prende una funzione (che prende due parametri, dal momento che ho una lista) e un caso base e un elenco (s).Mi aspetto che la mia seconda riga di codice possa tornare true se l'elenco ha più di zero booleani e sono tutti veri, ed è così che pensavo che avrebbe funzionato.Ma apparentemente no.
Soluzione
And
è un modulo speciale e non funzionerà con foldr
, che si aspetta una procedura come secondo argomento.Prova questo invece:
(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case
.
Un'altra alternativa per questo caso particolare utilizzerebbe andmap
:
(andmap identity '(#t #t #f))
. Altri suggerimenti
In un sistema di schema, and
è in genere definito come una macro o una forma speciale e non come una procedura, motivo per cui non funziona:
#;1> +
#<procedure C_plus>
#;2> and
Error: unbound variable: and
.