2011-01-23 85 views
0

只是想回到計劃的擺動再次遞歸下去,因爲每個人都喜歡的遞歸..(mhhmnmm。)計劃通過列表

反正試圖返回#T或#F以確定是否所有元素一個列表是唯一的。

比較第一個元素和第二個元素沒問題。它的遞歸繼續..

(define (unique ls) 
    (if (null? ls) #t 
    (equal? (car ls)(car(cdr ls))))) 

回答

1

我會寫一個演示循環不同,簡單的功能。希望在這之間和你有什麼,你會到達那裏。 :-)

(define (member x lst) 
    (cond ((null? lst) #f) 
     ((equal? x (car lst)) lst) 
     (else (member x (cdr lst))))) 

又如:

(define (assoc x alist) 
    (cond ((null? alist) #f) 
     ((equal? x (caar alist)) (car alist)) 
     (else (assoc x (cdr alist))))) 
0

嗯,你(equal?)調用是不完整的。如果頭部和尾部相等,則「唯一」的值是false。如果它們不相等,則返回應用於列表尾部(cdr)的值unique

(這是在你檢查預先排序列表中的原執行隱含的。如果不是這樣,那麼這是一個步驟拿。)

0
(use srfi-1) 

(define (unique? ls) (eq? (length ls) (length (delete-duplicates ls))))