List 更新列表元素,Haskell

List 更新列表元素,Haskell,list,haskell,map,List,Haskell,Map,我有一个家庭作业,我要用一个函数更新一个列表,这个函数包含两个元素,并返回函数中给定的第一个元素的一部分的值。因此,需要通过遍历每个元素来更新整个列表,并通过对列表中的所有其他元素(包括自身)应用函数来更新其值 到目前为止,我一直在尝试首先映射列表(以便每个元素都是相同的),然后通过再次映射指定元素的值来具体更新每个元素的值,但是在尝试通过以下方式映射特定值:函数,特定元素和整个列表我不断收到投诉,说我在从“map”函数推断值列表p@list列出,而不是简单地给出p@list. 以下是我一直试图

我有一个家庭作业,我要用一个函数更新一个列表,这个函数包含两个元素,并返回函数中给定的第一个元素的一部分的值。因此,需要通过遍历每个元素来更新整个列表,并通过对列表中的所有其他元素(包括自身)应用函数来更新其值

到目前为止,我一直在尝试首先映射列表(以便每个元素都是相同的),然后通过再次映射指定元素的值来具体更新每个元素的值,但是在尝试通过以下方式映射特定值:函数,特定元素和整个列表我不断收到投诉,说我在从“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