2011-01-23 2 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입니다. 값이 같지 않으면 unique 값을 목록의 꼬리 (cdr)에 적용하여 반환합니다.

(그것은 당신이 미리 정렬 된 목록을 확인하고 당신의 프로토 구현 암시입니다. 그렇지 않다면, 그 걸릴 또 다른 단계입니다.)

0
(use srfi-1) 

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