【问题标题】:Assigning values to a list of variables为变量列表赋值
【发布时间】:2012-11-13 17:15:08
【问题描述】:

我想输入两个长度相等的列表并将一个列表的值分配给另一个列表的变量。 我希望它自动实现第一个列表作为变量列表和第二个作为值。 例如 我想将[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));

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

【问题讨论】:

    标签: sml smlnj


    【解决方案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

    【讨论】:

    • 谢谢你的参考。我会通过它。而且,对不起,我刚刚意识到我不能以这种方式分配:val 3=2;我原以为,这里 3 会自动转换为变量,显然不是这样。好的,现在,我有一个列表 [a,b,c,d,e,f]。和另一个列表 [1,2,3,4,5,6]。我想分配 a=1,b=2,c=3,... 据我所知,这与 ref 不一样吗?是吗?
    • 你应该使用数组;然后你可以写update arr 2 2(这意味着arr的第三个元素被赋值给2)。
    猜你喜欢
    • 2018-08-14
    • 2015-08-11
    • 1970-01-01
    • 2010-09-17
    • 2021-07-05
    • 2022-11-28
    • 1970-01-01
    • 2014-07-25
    • 2011-06-08
    相关资源
    最近更新 更多