Frage

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

kehrt zurück 10 Das ist es, was ich erwarte, aber

(foldr and false '(true true false))

gibt mir den Fehler

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

foldr benötigt eine Funktion (die zwei Parameter benötigt, da ich eine Liste habe), einen Basisfall und eine oder mehrere Listen.Ich erwarte, dass meine zweite Codezeile „true“ zurückgibt, wenn die Liste mehr als null boolesche Werte enthält und alle wahr sind, und so dachte ich, dass es funktionieren würde.Aber offenbar nicht.

War es hilfreich?

Lösung

And ist eine Sonderform und funktioniert nicht foldr, das ein erwartet Verfahren als zweites Argument.Versuchen Sie stattdessen Folgendes:

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

Eine andere Alternative für diesen speziellen Fall wäre die Verwendung andmap:

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

Andere Tipps

In einem Scheme-System and wird normalerweise als Makro oder Sonderform und nicht als Prozedur definiert, weshalb es nicht funktioniert:

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

Error: unbound variable: and
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top