【问题标题】:Scheme Recursively going through a List递归遍历列表的方案
【发布时间】:2011-01-23 15:47:29
【问题描述】:

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

总是试图返回 #t 或 #f 以确定列表中的所有元素是否都是唯一的。

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

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

【问题讨论】:

    标签: recursion scheme


    【解决方案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)))))
    

    【讨论】:

      【解决方案2】:

      您的(equal?) 调用不完整。如果头部和尾部相等,那么“unique”的值为false。如果它们不相等,那么您将返回应用于列表尾部 (cdr) 的 unique 的值。

      (在您的原型实现中暗示您正在检查预先排序的列表。如果没有,那么这是另一个步骤。)

      【讨论】:

        【解决方案3】:
        (use srfi-1)
        
        (define (unique? ls) (eq? (length ls) (length (delete-duplicates ls))))
        

        【讨论】:

          猜你喜欢
          • 2019-08-03
          • 2016-04-30
          • 2014-03-01
          • 2012-03-27
          • 2021-10-05
          • 2021-09-19
          • 2021-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多