从Scheme中的交集列表中删除重复项

时间:2016-10-28 15:36:56

标签: list duplicates scheme racket intersection

我有一段代码可以获得两个列表的交集。但是,我想删除列表中的所有重复项。我使用函数remove-duplicates()。每当我使用它时,drRacket都会出现以下错误。

  

申请:不是程序;    期望一个可以应用于参数的过程     给出:(a b c c d)     参数......:[无]

这是我的代码

#lang scheme
(define (intersect lst1 lst2)
  (removedup(lst1 lst2))
    (cond
      ((null? lst1)(quote ()))
      ((isin? (car lst1) lst2)
       (cons (car lst1)
             (intersect (cdr lst1) lst2)))
      (else (intersect (cdr lst1) lst2))))

(define (removedup lst1 lst2)
  (remove-duplicates(lst1))
  (remove-duplicates(lst2))
  )

(define (isin? a lat)
    (cond
      ((null? lat) #f)
      (else (or (equal? (car lat) a)
                (isin? a (cdr lat))))))

我的输入是> (intersect '(a b c c d) '(c d e f))

任何人都可以帮我解决问题吗? 提前致谢

1 个答案:

答案 0 :(得分:5)

看起来你是从另一种语言来到Racket。在Racket和Scheme中,您无法添加额外的括号;每对括号都有特定的含义。在这种情况下,你写了

(remove-duplicates(lst1))

当你打算写

(remove-duplicates lst1)

其中第一个有两个函数调用:调用lst1,然后调用remove-duplicatelicates并返回结果。其中第一个不会成功,因为lst1不是一个功能。

另外,看看DrRacket给你的粉红色突出显示;它可能突出了问题领域。

另请注意,当您修复此错误时,您可能会在下一行获得另一个非常相似的错误吗?