2012-11-12 57 views
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)); 

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

回答

1

赋值对于不可变类型没有意义。我想你想做到这一点:

还有就是int[1,2,3,4,5,6]列表以及它们与默认值[ref 0, ref 0, ref 0, ref 0, ref 0, ref 0]初始化INT references列表。您想更新对[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要好得多。

+0

谢谢你的参考。我会通过它。 和,对不起,我只是意识到我不能这样分配:val 3 = 2;我曾想过,这里3被自动转换为变量,这显然不是这种情况。好吧,现在,我有一个列表[a,b,c,d,e,f]。和另一个列表[1,2,3,4,5,6]。我想分配一个= 1,b = 2,c = 3,......据我所知,它与参考文献不一样吗?还是它? – 700resu

+0

你应该使用数组;那么你可以写'update arr 2 2'(这意味着'arr'的第三个元素被赋值为'2')。 – pad