Схема рекурсивного прохождения списка - PullRequest
0 голосов
/ 23 января 2011

Просто снова пытаюсь вернуться в ход схемы, потому что все любят рекурсию .. (ммхмммм.)

в любом случае пытается вернуть #t или #f, чтобы определить, являются ли все элементы в списке уникальными.

Сравнение 1-го элемента и 2-го элемента без проблем. Это рекурсивно продолжается ..

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

Ответы [ 3 ]

1 голос
/ 23 января 2011

Я напишу другую, более простую функцию, которая демонстрирует циклы. Надеюсь, между этим и тем, что у вас есть, вы попадете туда. : -)

(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 голосов
/ 23 января 2011
(use srfi-1)

(define (unique? ls) (eq? (length ls) (length (delete-duplicates ls))))
0 голосов
/ 23 января 2011

Ну, ваш (equal?) вызов не завершен.Если голова и голова хвоста равны , то значение «уникальность» равно false.Если они не равны, то вы бы вернули значение unique, примененное к хвосту (cdr) списка.предварительно отсортированный список. Если нет, то это еще один шаг.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...