【发布时间】:2018-04-11 15:33:07
【问题描述】:
我正在尝试更新 SML 中 2 元组的运行列表。这与以下问题相同:How can I update lists in SML using functions?
不幸的是,答案没有帮助。首先,这是我的代码:
fun member(a, []) = false
| member((a, b), (c, d)::cds) = a = c orelse member((a, b), cds);
fun update([], (loc, v)) = [(loc, v)]
| update((y, z)::yzs, (loc, v)) =
if member((loc, v), (y, z)::yzs) then
if loc = y then (loc, v)::yzs
else (y, z)::update(yzs, (loc, v))
else (y, z)::yzs@[(loc, v)];
我可以调用 FLR 上的更新函数来创建新值,但只能更新最后一个值。此外,当最后一个值被添加并且我再次调用更新函数时,它并没有附加到 FLR。这是我的例子:
- val FLR = [(1,1),(2,4),(3,9),(4,16),(5,25)];
val FLR = [(1,1),(2,4),(3,9),(4,16),(5,25)] : (int * int) list
- update(FLR, (6,36));
val it = [(1,1),(2,4),(3,9),(4,16),(5,25),(6,36)] : (int * int) list
- update(FLR, (7,42));
val it = [(1,1),(2,4),(3,9),(4,16),(5,25),(7,42)] : (int * int) list
我有没有办法将新列表的值分配给 FLR,而不是将值分配给“它”?此外,我无法向空列表添加新值?有什么建议吗?
【问题讨论】:
-
update实际上并没有更改其输入,它返回一个包含所需更改的新输出。要获取新值,只需将其再次绑定到FLR,例如val FLR = update(FLR, (6, 36)); -
嗨@Oshua,欢迎来到 StackOverflow!不要重复现有问题。相反,如果您有一个与现有问题如此相关的问题,请在评论中提出一个澄清问题,例如“我能够调用更新函数 FLR 来创建新值,但只能更新最后一个值。[.. .]"