更改标准ml列表中的变量

时间:2014-10-27 02:07:03

标签: list variables sml smlnj

我想知道在使用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的新手,并且不熟悉语言中的列表设置,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

你必须意识到ML中的值是不可变的。这意味着一旦你创建了一个值,你就无法改变它!

所以,如果我们有这两个陈述

x = [2,3,4]
y = 1::x

然后yx位于计算机上的单独内存位置。


您可以做的是:

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)