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.

È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top