我正在尝试创建一个函数,该函数将检查数字列表是否重复并返回#t或#f。我只能使用car,cdr和conditional,没有缺点。 到目前为止,这是我所拥有的,但给我的错误是“汽车:预期违反合同:成对?给定:#f”
(define (dups a)
(if (null? a)
#f
(if (= (car a)(car(dups(cdr a))))
#t
(dups (cdr))
)
)
)
我是计划和递归的新手,任何帮助/建议都将不胜感激。
答案 0 :(得分:0)
您的第二个if
没有多大意义。我假设您想检查(car a)
是否出现在列表的下方,但是(car (dups (cdr a)))
却没有。另外,(car (dups ...))
是类型问题,因为dups
将返回布尔值而不是列表,并且car
期望有一个列表(或者实际上是一对,这就是列表的组成)的。
您需要的是第二个函数,用于在第二个if的测试中调用。该函数接受一个元素和一个列表,然后在列表中搜索该元素。当然,如果允许的话,请使用find
,否则要实现某种my-find
-它非常简单,类似于您的dups
函数。