Scheme 查找包含值的子列表的索引

Scheme 查找包含值的子列表的索引,scheme,Scheme,假设我们有以下列表: '( (1 2 3) (3 4 5) (7 8 9) (2 9 9) ) 我需要从包含给定值的子列表中创建一个包含所有索引的列表,例如,对于2,结果将是”(03)。这是一个家庭作业,我们不允许使用循环。使用递归解决这个问题很简单,但我想使用泛函,但我不知道这是否可行(不使用全局变量、set!和任何其他横向函数)。欢迎任何提示/建议 是的,用foldl绝对可以解决这个问题。Foldl可用于对列表的任何类似循环的遍历进行建模 老实说,要理解如何使用foldl来解决这样的问题,

假设我们有以下列表:

'( (1 2 3) (3 4 5) (7 8 9) (2 9 9) )

我需要从包含给定值的子列表中创建一个包含所有索引的列表,例如,对于2,结果将是
”(03)
。这是一个家庭作业,我们不允许使用循环。使用递归解决这个问题很简单,但我想使用泛函,但我不知道这是否可行(不使用全局变量、set!和任何其他横向函数)。欢迎任何提示/建议

是的,用foldl绝对可以解决这个问题。Foldl可用于对列表的任何类似循环的遍历进行建模

老实说,要理解如何使用foldl来解决这样的问题,最清晰的方法是首先以简单的递归方式编写它,然后是。您应该注意仅在递归调用中使用列表的
rest

接下来,您需要重构程序,使其只进行尾部调用;也就是说,如果要定义一个名为
f
的函数,“cons”的大小写应该是
(f…
,没有任何“外部”的内容。为了实现这一点,您可以为函数引入一个额外的参数,通常称为“累加器”。空情况下函数的结果可能只是累加器。此时,更改为使用
foldl
只需调用
foldl
,调用列表、累加器的初始值以及获取列表的第一个元素和累加器并生成新累加器的函数即可


在此设置中,“functionals”一词是什么意思?@JohnClements foldr、foldl、map、apply、filter主要问题是我不知道如何计算迭代步骤以创建索引列表。我尝试使用另外一个变量作为计数值,但foldl不适用于相同大小的列表以外的其他变量。@DaniMocanu使用
(foldl(lambda(索引元素acc)…)(范围(长度lst))lst)
?@DaniMocanu您可以使用列表或cons将两个值“捆绑”为一个值。是的,这很烦人。