Nun .. Nach Ihren eigenen Text is-sculpture
ist eine Funktion, die #t
oder #f
zurückgibt. =
ist eine Funktion, die nur numerische Argumente verwendet, so soll dieser Aufruf schief gehen:
(= (is-sculpture? (right-mobile mobile)) #t) ; #t is not a number
nun einen Wert gegen ein anderes überprüfen Sie eq?
für das exakt gleiche Objekt verwenden können (#t
das gleiche Objekt Symbole jedes Mal, zu), eqv?
für primitive Typen. (eq? 5 5) ; ==> #f
während (eqv? 5 5) ; ==> #t
. equal?
enthalten auch Sequenzen des gleichen Typs, bei denen alle Primitive eqv?
sind. z.B. (eqv? (list 1 2 3) (list 1 2 3)) ; ==> #f
während (equal? (list 1 2 3) (list 1 2 3)) ; ==> #t
.
Für Dinge, die #t
oder #f
zurückgibt, müssen Sie nicht (eq? (is-sculpture? ...) #t)
, weil es das gleiche wie (is-sculpture? ...)
ist. Um das Gegenteil zu überprüfen, wickeln Sie das Ergebnis einfach in not
, also (not (is-sculpture? ...))
wird #t
für #f
Ergebnis.
In der zweiten Amtszeit in Ihrem cond
Sie wissen, (is-sculpture? mobile)
war nicht wahr, also warum überprüfen Sie, ob es falsch ist, wenn es nur falsch in der nächsten Zeile sein kann? Bei jedem Begriff in cond
können Sie erwarten, dass alle vorherigen Begriffe in derselben cond
falsch sind.
Wir analysieren Code nicht wirklich mit unseren Augen, also sagt die Identifikation uns, wie viele parens dort sind und nicht die tatsächliche Menge von parens. Daher ist schlecht formatierter Lispcode nicht lesbar.
In Schläger müssen Sie CTRL +ich es Ihr Code reident drücken. Du brauchst es dringend. Setze auch alle Endparens am Ende der vorherigen Zeile. Heres, wie ich es formatiert werden:
(define (weights# mobile)
(cond ((is-sculpture? mobile)
1)
; (is-sculpture? mobile) is #f
((and (is-sculpture? (right-mobile mobile))
(is-sculpture? (left-mobile mobile)))
3)
; At least one of the other is-sculpture? expressions are false.
(else
(+ 1 ; 3 + x-1 + y-2 == 1+x+y
(weights# (right-mobile mobile))
(weights# (left-mobile mobile))))))
Neben removnig alle =
Tests, die reduncant sind habe ich nicht die Logik geändert und ich habe keine Möglichkeit der Prüfung, da ich Ihre anderen Funktionen nicht oder welche Argumente diese dauert.