【发布时间】:2021-03-01 00:57:54
【问题描述】:
我想找到一种在函数中使用计数器的方法,其中计数器也是递归函数中的变量。这方面的一个例子是一个程序,它获取一个列表,然后“筛选”它,直到找到其中所有是 i 的倍数的数字:
(define (multiples-of lst) (lambda (i) (if (> i 3))
'()
(multiplefilter (ismultipleof (+ i 1)) (lst)))))
ismultipleof 检查每个列表的 car 是否是 i + 1 的倍数(i 从 1 开始),然后 multiplefilter 是一个单独的函数,它会删除列表中任何不是的倍数的值i。因此,如果我将(1 2 3 4 5 6 7 8 9 10 11 12) 放入列表中,输出将只是(6 12)。最大的问题是让所说的计数器在函数内工作。
【问题讨论】:
-
我尝试过使用 (cond 来代替 if 语句,但我仍然遇到同样的问题,它不起作用。
-
看起来你定义函数的方式有点混乱。您能否举例说明您希望如何调用此过程?
-
你能补充一点吗?该问题引用了三个函数:
multiplesof、multiplefilter和multipleof(没有“s”)。这是一个错字还是你想要的? -
另外,据我了解,
multipleof是一个谓词,在您的示例中会为 4 的倍数返回 #t,即'(4 8 12)。如果这是真的,那么您的示例似乎应该只返回'(12)。再说一遍,这是你的意图吗? -
名称有点乱,但这就是目的。我想让数字工作的方式是一个循环(所以检查列表是否是 1、2 和 3 的倍数。我将调整代码以使其更易于阅读。我会通过不同的方式调用它函数或本身,现在我只是在它的循环方面遇到了麻烦。
标签: scheme racket counter higher-order-functions