通过匹配
问题描述:
我工作的任务从一个函数中提取值,并给出了以下功能:通过匹配
fun label (lb,ub) =
let val s = callcc (fn k =>let fun branch c = if (c < ub)
then (pushCP (k,branch,c+1);c)
else ub
in (pushCP(k,branch,lb+1);lb)
end)
in {value=s,dom=(lb,ub)}
end;
如果你把一个上限和下限假设1和3into此功能,将打印
val it = {dom=(1,3), value=1}
我想弄清楚的是,如果它完全有可能获得价值。在我的笔记中,它说两种可能的方式是通过#value(x)或val {value = a,...} = x来实现的,但是我用这两种方法都会遇到错误。 任何线索我做错了什么?
答
目前尚不清楚你在做什么错了,因为你没有复制你真正尝试过,但你的笔记是正确的:
- val x = {dom=(1,3), value=1};
val x = {dom=(1,3),value=1} : {dom:int * int, value:int}
第一种方法是使用#value
提取value
场并#dom
提取dom
字段:
- #value x;
val it = 1 : int
- #dom x;
val it = (1,3) : int * int
第二种方法是使用模式匹配。您可以提取单个字段:
- val {value = a,...} = x;
val a = 1 : int
或者你可以一次提取两个领域:
- val {dom = a, value = b} = x;
val a = (1,3) : int * int
val b = 1 : int
为了使上述工作,x
需要绑定的值。也许你试图用x
这个没有给出val
绑定的方法来使用它。你需要这样的东西:
val x = label(1,3)
我没有所有相关的代码,所以我无法测试。如果上述内容不足以回答您的问题,则需要提供更多详细信息。