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

Removing duplicates from intersection list in Scheme

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

application: not a procedure; expected a procedure that can be applied to arguments given: (a b c c d) arguments...: [none]

这是我的代码

#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))

谁能帮我解决我的问题? 提前致谢

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

(remove-duplicates(lst1))

当你打算写的时候

(remove-duplicates lst1)

其中第一个有两个函数调用:对 lst1 的调用,然后是对结果删除重复项的调用。第一个不能成功,因为 lst1 不是函数。

另外,看看 DrRacket 给你的粉色高亮;它可能突出了问题区域。

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