我想知道在使用ml的列表时,如何使用列表的特定位置更改变量。例如,当我有一个列表[1,2,3,4]时,我想用3的副标题将列表更改为[1,2,5,4]。我在想是写的获取位置,变量和列表的函数返回带有更新变量的新列表。例如,
change(i, var, list) = let val valup = var in (list @ [i]) end
因此,使用此代码,如果我的输入为change(2, 5, [1,2,3,4])
,则我的输出将为[1,2,3,4,2]
,与[1,2,5,4]
不正确。我是ml的新手,并且不熟悉语言中的列表设置,所以任何帮助都会非常感激。
答案 0 :(得分:0)
你必须意识到ML中的值是不可变的。这意味着一旦你创建了一个值,你就无法改变它!
所以,如果我们有这两个陈述
x = [2,3,4]
y = 1::x
然后y
和x
位于计算机上的单独内存位置。
您可以做的是:
fun swapFirst [] y = raise Empty
| swapFirst (x::xs) y = y::xs
val test_swapFirst_00 = [1,2,3,4] = swapFirst [2,2,3,4] 1
将把列表的第一个元素与其他东西交换。
现在我有一种感觉,这可能是一些课程工作的答案,所以我不打算提供一个完整的代码来解决你的问题,但是这些信息至少应该清除一些东西,然后制作它更容易解决问题!
答案 1 :(得分:0)
我想出了问题的解决方案。
fun change(i,v,[]) = raise Error
| change(0, v, x::xs) = v :: xs
| change(i, v, x::xs) = if i < 0 then raise Error
else x :: change((i-1), v, xs)