【发布时间】:2021-08-16 05:16:28
【问题描述】:
大家好! 所以我的问题是我在这段代码中没有看到任何不好的地方。
type Name = String
type Val = Either Int Bool
type Env = [(Name, Val)]
update :: Name -> Val -> Env -> Env -> Env
update x v [] origi = (x,v): origi
update x v ((x', v'):xs) origi
| x == x' = (x, v):xs
| otherwise = (x', v') : update x v xs origi
但任何时候我调用它都会重复第一个元素。我相信它不会检查列表的最后一个元素,但我没有在我错过它的地方得到它。
所以我想在这里做什么。正在更新列表中的元素。但如果他们不在列表中。我想把它们放在开头。我知道把它们放在最后很容易。
【问题讨论】:
-
为什么有两个
Env参数?我只期待一个。 -
一个是遍历原始lsit,一个是逐个元素遍历List
-
我认为这不应该是函数外部接口的一部分。它可以使用辅助函数在内部处理该细节。
-
我没看懂这个对不起:(
-
所以我应该跳过将原始列表存储在变量中吗?