0

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

exception error

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

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

4

1 回答 1

1

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

有一个列表和一个使用默认值初始化 int [1,2,3,4,5,6]的 int引用[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,引用列表包含新值。

但是,对于这些具有破坏性更新的场景,最好使用值数组

于 2012-11-12T11:03:54.933 回答