使用递归在方案列表中查找重复的元素

时间:2018-10-07 18:28:04

标签: recursion scheme racket

我正在尝试创建一个函数,该函数将检查数字列表是否重复并返回#t或#f。我只能使用car,cdr和conditional,没有缺点。 到目前为止,这是我所拥有的,但给我的错误是“汽车:预期违反合同:成对?给定:#f”

(define (dups a)
    (if (null? a)
        #f
        (if (= (car a)(car(dups(cdr a))))
            #t
            (dups (cdr))
        )
    )
)

我是计划和递归的新手,任何帮助/建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的第二个if没有多大意义。我假设您想检查(car a)是否出现在列表的下方,但是(car (dups (cdr a)))却没有。另外,(car (dups ...))是类型问题,因为dups将返回布尔值而不是列表,并且car期望有一个列表(或者实际上是一对,这就是列表的组成)的。

您需要的是第二个函数,用于在第二个if的测试中调用。该函数接受一个元素和一个列表,然后在列表中搜索该元素。当然,如果允许的话,请使用find,否则要实现某种my-find-它非常简单,类似于您的dups函数。