【发布时间】:2016-04-12 04:38:51
【问题描述】:
这是我必须解决的任务:编写一个迭代函数,它接收一个包含数字的列表并创建一个新列表,该列表仅包含接收到的列表中的偶数。
我什至发现了一些包含类似问题和解决方案的帖子,但我无法将它们用作帮助,因为在这些解决方案中,他们使用了“car”和“cdr”命令,而我们在我们的计划呢。怎么能做到这一点?我会这样开始:
(define filter-odds
(lambda(x)
(if (odd? x)
...)
【问题讨论】:
-
那么你看过Scheme的哪一部分?例如,您看到
first和rest了吗? -
当然我见过
first和rest...但即使使用这两个命令我也无法解决任务。 -
那么使用您找到并喜欢的任何解决方案,只需将
car替换为first并将cdr替换为rest,因为它们是相同的(对于正确的列表)。 -
先写一个“常规”递归版本,确保你的逻辑是合理的。然后通过添加累加器参数使其迭代(尾递归)。 (由于这是家庭作业,您可能需要“手动”执行递归,而不是将其委托给归约函数。)如果您需要一本好书,SICP 是available online,并且很好地解释了这一点。
-
@uselpa:感谢您的回答。也许我应该提到我和我的班级都是初学者。因为不知道
first和car或rest和crd是相同的,所以我真的不想问愚蠢的问题。
标签: list filter numbers scheme iteration