2011-01-23 4 views
0

Juste essayer de revenir dans le swing du système à nouveau, parce que tout le monde aime récursion .. (mhhmnmm.)Scheme va récursive dans une liste

de toute façon essayer de revenir #t ou #f pour déterminer si tous les éléments une liste est unique.

Comparer le 1er élément et le 2ème élément sans problème. Il est récursive continue ..

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

Répondre

1

Je vais écrire un autre, la fonction plus simple qui démontre une boucle . Espérons entre cela et ce que vous avez, vous y arriverez. :-)

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

Un autre exemple:

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

Eh bien votre (equal?) invocation est incomplète. Si la tête et la tête de queue sont égales à, la valeur de "unique" est false. Si elles ne sont pas égales, vous devez renvoyer la valeur unique appliquée à la queue (cdr) de la liste.

(Il est implicite dans votre proto-implémentation qui vous vérifiez une liste pré-triés. Sinon, c'est une autre étape à prendre.)

0
(use srfi-1) 

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