看來,方案考慮了一些整數和浮點版本採用相同的時候是不同的?,但同樣使用=時,對它們進行比較:不過,如果我遞歸數值等於
(equal? 2 2.0) ; => #f
(= 2 2.0) ; => #t
有一些數字部分(甚至是簡單的數字列表)的遞歸結構,有沒有一種方法可以比較使用=進行數字比較的方法?
(equal? '(2 3) '(2.0 3.0)) ; => #f
(= '(2 3) '(2.0 3.0)) ; error: contract violation
我可以寫我自己的平等檢查,是這樣的:
(define myequal?
(lambda (x y)
(cond ((and (null? x) (null? y)) #t)
((or (null? x) (null? y)) #f)
((and (pair? x) (pair? y))
(and (myequal? (car x) (car y))
(myequal? (cdr x) (cdr y))))
((or (pair? x) (pair? y)) #f)
((and (number? x) (number? y)) (= x y))
((or (number? x) (number? y)) #f)
(else (equal? x y)))))
但似乎這將是一個非常普通的任務計劃可能有一個內置的方法來做到這一點。
啊復發,這對號碼清單一個很好的解決方案。這聽起來像是對於更復雜的結構,比如'(a 2(b 3))與'(a 2.0(b 3.0)),你可能需要編寫一個自定義函數。 –
@JeffAmes我編輯了一個製作通用平等製造商的例子,您可以指定如何比較某些類型。 – Sylwester