List 列表上的工作在进入列表时更新理解
我试图在列表理解中更新列表(即替换元素),然后将更新后的列表用于列表理解的下一次迭代 例如,在此代码中:List 列表上的工作在进入列表时更新理解,list,haskell,iteration,list-comprehension,List,Haskell,Iteration,List Comprehension,我试图在列表理解中更新列表(即替换元素),然后将更新后的列表用于列表理解的下一次迭代 例如,在此代码中: let n_nums = [replaceAt n (nums!!(n + 1)) nums | n <- [0..length nums]] let n_nums=[replaceAt n(nums!!(n+1))nums | n不能使用列表理解(除非使用zip,请参见下文) 使用scanl::(b->a->b)->b->[a]->[b]或迭代::(a->a)->[a]或mapAc
let n_nums = [replaceAt n (nums!!(n + 1)) nums | n <- [0..length nums]]
let n_nums=[replaceAt n(nums!!(n+1))nums | n不能使用列表理解(除非使用zip
,请参见下文)
使用scanl::(b->a->b)->b->[a]->[b]
或迭代::(a->a)->[a]
或mapAccumL::(acc->x->(acc,y))->acc->[x]->(acc,[y])
和其他传递更高阶函数的相关状态
在其结果上可能最适合这里。或者scanl
在索引列表上[1..n]
。或者类似的东西
当然,手工编码的递归代码始终是一种选择
再想一想,使用zip
,输入可以与使用tail
移动一个槽口的结果配对,然后可以在列表中提取压缩结果…以创建结果
请参阅(也使用
zip
和last
).所有Haskell的对象都是不可变的,所以你不能编辑列表,你可以创建一个新的列表。你能准确地解释一下你想要什么吗。比如你想生成什么列表。而不是你想如何生成列表?谢谢,我仍然需要对Haskell中的许多概念了如指掌。在上面的示例中,如果nums=[0,1,2,3,4,5]
,我希望最终结果是n_nums=[1,2,3,4,5,6]
。但这只是一个简单的例子-我想将相同的原则应用于与nums
完全不同的其他列表。如果你想“转移”,这看起来像是一个map(1+)nums
在左边的列表中,我并不完全清楚6
的来源。