Schema/Schläger:Mit Booleschen Werten falten
-
13-12-2019 - |
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.
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