Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表上的工作在进入列表时更新理解_List_Haskell_Iteration_List Comprehension - Fatal编程技术网

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
的来源。