Scheme递归遍历List

时间:2011-01-23 15:47:29

标签: recursion scheme

只是想再次回到计划的摇摆中,因为每个人都喜欢递归..(mhhmnmm。)

无论如何都试图返回#t或#f来确定列表中的所有元素是否都是唯一的。

比较第一元素和第二元素没问题。它递归地继续......

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

3 个答案:

答案 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))))