List 更新列表元素,Haskell
我有一个家庭作业,我要用一个函数更新一个列表,这个函数包含两个元素,并返回函数中给定的第一个元素的一部分的值。因此,需要通过遍历每个元素来更新整个列表,并通过对列表中的所有其他元素(包括自身)应用函数来更新其值 到目前为止,我一直在尝试首先映射列表(以便每个元素都是相同的),然后通过再次映射指定元素的值来具体更新每个元素的值,但是在尝试通过以下方式映射特定值:函数,特定元素和整个列表我不断收到投诉,说我在从“map”函数推断值列表p@list列出,而不是简单地给出p@list. 以下是我一直试图实现的示例:List 更新列表元素,Haskell,list,haskell,map,List,Haskell,Map,我有一个家庭作业,我要用一个函数更新一个列表,这个函数包含两个元素,并返回函数中给定的第一个元素的一部分的值。因此,需要通过遍历每个元素来更新整个列表,并通过对列表中的所有其他元素(包括自身)应用函数来更新其值 到目前为止,我一直在尝试首先映射列表(以便每个元素都是相同的),然后通过再次映射指定元素的值来具体更新每个元素的值,但是在尝试通过以下方式映射特定值:函数,特定元素和整个列表我不断收到投诉,说我在从“map”函数推断值列表p@list列出,而不是简单地给出p@list. 以下是我一直试图
res :: X -> X -> Z -- function given
myf :: [X] -> [X] -- Here is my function
myf ps = map newf ps
where
newf p@(X oldz) = X newz
newz = map (res p) ps
这是针对整个列表本身更新列表的正确方法吗
编辑:拼写错误和语法-我很抱歉没有在上面贴上家庭作业标签
这是针对整个列表本身更新列表的正确方法吗
我不确定代码是否适合任何任务。
看起来您假设p@(X oldz)
正在使用构造函数X oldz
从列表中获取元素,并将其命名为p
。但是
您需要描述在应用map(resp)
后列表发生更改时的行为。
如果您对列表的所有“更改”仅基于列表的初始值进行,并按从第一个元素到最后一个元素的顺序应用:
myf ps = (buildPlan ps) ps where
buildPlan [] = id
buildPlan (x:xs) = map (res x) . buildPlan xs
有些人可能更喜欢:
myf ps = changesPlan ps where
change x = map (res x)
changesPlan = foldr (.) id (map change ps)
如果您对列表的“更改”应该从先前的映射(res x)
中进行更改(在遍历列表时使用非func语言,您可以更改所有元素,即使是在下一次迭代中将要执行的元素):
您能给出代码示例来说明您所描述的方法吗?您可能还想添加一个家庭作业标记。您的示例代码没有多大意义--
p
不在newz
的范围内,newf
不使用它的参数,您没有定义res
或X
和Z
数据类型,而且我甚至无法确定您要做什么。
myf ps0 = rebuildFrom 0 ps0 where
rebuildFrom n ps | n >= length ps = ps
rebuildFrom n ps = rebuildFrom (n+1) ps' where
x = ps !! n
ps' = map (res x) ps