まあ..独自のテキストによるとis-sculpture
が#t
または#f
を返す関数です。 =
は数字のみの引数をとる関数である。したがって、この呼び出しが間違って行く必要があります。今
(= (is-sculpture? (right-mobile mobile)) #t) ; #t is not a number
あなたがまったく同じオブジェクト(#t
は毎回同じオブジェクトである、シンボルにeq?
を使用することができます別に対して一つの値をチェックしますあまりにも)、eqv?
プリミティブ型の場合(eq? 5 5) ; ==> #f
(eqv? 5 5) ; ==> #t
です。 equal?
はまた、全てのプリミティブがeqv?
である同じタイプのシーケンスを含む。例えば。 (equal? (list 1 2 3) (list 1 2 3)) ; ==> #t
。(eqv? (list 1 2 3) (list 1 2 3)) ; ==> #f
。
#t
または#f
を返すものについては、(is-sculpture? ...)
と同じであるため、(eq? (is-sculpture? ...) #t)
は不要です。あなたはちょうどnot
の結果をラップするので、(not (is-sculpture? ...))
は、の結果では#t
になります。
cond
の2番目の単語には、(is-sculpture? mobile)
が真ではないことがわかっています。なぜ、次の行で偽である可能性がある場合は、どうして偽であるかチェックしますか? cond
のすべての用語は、同じcond
の以前のすべての用語が偽であると期待できます。
私たちは目でコードを実際に解析していないので、実際に括約筋がいくつあるかを示しています。したがって、ひどくフォーマットされたlispコードは読めません。ラケットで
は、私はそれはあなたのコードをreidentます
CTRL +
を押す必要があります。あなたは必死にそれを必要とします。また、前の行の最後にすべての終わりの括弧を入れてください。私はそれをフォーマットする方法をHERESに: (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))))))
reduncantあるすべて=
テストをremovnigのほかに、私はロジックを変更していないと私はあなたの他の機能を持っているか、どのような引数は、このしていないので、私は、テストの方法がありません取る。