【发布时间】:2012-03-23 21:54:11
【问题描述】:
我需要编写一个 Scheme 函数来检查列表中的重复条目。我想我已经把工作流程写在纸上了,我只需要帮助把它从纸上写成代码。
首先我需要检查它是否是一个空列表。所以我有...
(define (checkDupe mylist)
(if (null? mylist)
()
(checkDupeB mylist)
)
)
然后我有这种“双重递归”,我将第一个数字与列表的其余部分检查,然后将第二个数字与列表的其余部分检查,依此类推,当找到匹配项时它会吐出一个#t,如果它到达末尾并且没有找到匹配,函数的结果是#f。问题是我无法理解这个递归的东西。这是一个家庭作业问题,但我对学习这些东西非常感兴趣。
有人可以向我扔一些代码并帮助我解决这个问题吗?
【问题讨论】:
-
您可能想看看如何设计程序的草案,第 2 版,尤其是从第 4 章开始:ccs.neu.edu/home/matthias/HtDP2e/htdp2e-part2.html。该章介绍了如何有条不紊地处理这类列表问题。
-
要理解递归,你只需要理解计数。我们用自然数来计算。什么是自然数?它要么是 0,要么比自然数大一。 imagine you're a wizard 在炎热干旱的沙漠中。你知道附近每个城市的方向;你决定怎么去?你想找到最近的。你怎么能知道到一个城市的距离而不实际去那里?你是个巫师;你创建一个自己的副本,离那个城市更近一步,然后向它寻求答案。因为他也是一个巫师,所以他重复这个过程。
标签: list recursion duplicates scheme workflow