嗯..根據自己的文字is-sculpture
是返回#t
或#f
功能。 =
是一個函數,只需要數字參數,因此此調用應該出問題:
(= (is-sculpture? (right-mobile mobile)) #t) ; #t is not a number
我們檢查一個值與另一個可以使用eq?
對於完全相同的對象(#t
是同一個對象每次,符號),原始類型爲eqv?
.. (eq? 5 5) ; ==> #f
,而(eqv? 5 5) ; ==> #t
。 equal?
也包括所有基元爲eqv?
的相同類型的序列。例如。 (eqv? (list 1 2 3) (list 1 2 3)) ; ==> #f
,而(equal? (list 1 2 3) (list 1 2 3)) ; ==> #t
。
對於返回#t
或#f
的東西,您不需要(eq? (is-sculpture? ...) #t)
,因爲它與(is-sculpture? ...)
相同。要檢查oposite,您只需將結果換算爲not
,因此(not (is-sculpture? ...))
對於#f
結果爲#t
。
在你的cond
的第二項,你知道(is-sculpture? mobile)
是不正確的,所以你爲什麼要檢查它是否是錯誤的,當它只能在下一行是錯誤的? cond
中的每個術語都可以預期在同一個cond
中的所有以前的術語都是錯誤的。
我們實際上並沒有用我們的眼睛解析代碼,所以這個標識告訴我們有多少個parens,而不是真正的parens數量。因此,嚴重格式化的lisp代碼是不可讀的。
在球拍中你需要按CTRL + i它會重新編寫代碼。你非常需要它。還把所有的結束部分放在前一行的末尾。繼承人我怎麼會格式化:
(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))))))
除了removnig所有=
測試是reduncant我沒有改變的邏輯,我沒有測試的方式,因爲我沒有你的其他功能還是這個哪些參數需要。