只是想再次回到计划的摇摆中,因为每个人都喜欢递归..(mhhmnmm。)
无论如何都试图返回#t或#f来确定列表中的所有元素是否都是唯一的。
比较第一元素和第二元素没问题。它递归地继续......
(define (unique ls)
(if (null? ls) #t
(equal? (car ls)(car(cdr ls)))))
答案 0 :(得分: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)))))
答案 1 :(得分:0)
你的(equal?)
调用是不完整的。如果头部和尾部 相等,则“唯一”的值为false
。如果它们不相等,那么您将返回应用于列表尾部(cdr)的unique
值。
(你的原型实现中暗示你正在检查预先排序的列表。如果没有,那么这是另一个步骤。)
答案 2 :(得分:0)
(use srfi-1)
(define (unique? ls) (eq? (length ls) (length (delete-duplicates ls))))