将值分配给变量列表

时间:2012-11-12 10:16:21

标签: sml smlnj

我想输入两个长度相等的列表,并将一个列表的值分配给另一个列表的变量。 我希望它自动将第一个列表作为变量列表实现,其次作为值实现。 例如 我想将[1,2,3,4,5,6]值分配给变量列表[9,10,11,12,13,14]中的元素,即 1为值9,列表中值为10。

exception error

fun assign([],_) = raise error
  | assign(_,[]) = raise error
  | assign(l::ls,b::ls) = (val l=b ; assign(ls,bs));

我知道几乎没有问题。首先,函数应该返回值吗?有关我如何处理的任何建议?我的意思是创建一个有意义的函数,根据需要分配值。

1 个答案:

答案 0 :(得分:1)

分配值对不可变类型没有意义。我假设你想这样做:

有一个int [1,2,3,4,5,6]列表和一个int references列表,这些列表使用默认值[ref 0, ref 0, ref 0, ref 0, ref 0, ref 0]初始化。您想更新对[ref 1, ref 2, ref 3, ref 4, ref 5, ref 6]

的引用

您只需要对您的功能进行一些小修改:

fun assign([], []) = ()
  | assign(_, []) = raise error
  | assign(_, []) = raise error
  | assign(l::ls, r::rs)= (r := l ; assign(ls, rs))

该函数返回unit并在调用assign后,引用列表包含新值。

但是,对于具有破坏性更新的这些方案,最好使用array of values