Sml 通过匹配从函数中提取值

Sml 通过匹配从函数中提取值,sml,smlnj,Sml,Smlnj,我正在完成一项任务,并被赋予以下职能: 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

我正在完成一项任务,并被赋予以下职能:

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;
我想弄清楚的是,是否有可能得到这个值。在我的笔记中,它说两种可能的方法是通过#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
需要绑定到该值。可能您正试图将其用于未被赋予
val
绑定的
x
。你需要有这样的东西:

val x = label(1,3)

我没有所有相关的代码,所以无法测试。如果以上内容不足以回答您的问题,您需要提供更多详细信息。

由于您没有复制您实际尝试过的内容,因此不清楚您做错了什么,但您的笔记是正确的:

- 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
需要绑定到该值。可能您正试图将其用于未被赋予
val
绑定的
x
。你需要有这样的东西:

val x = label(1,3)
我没有所有相关的代码,所以无法测试。如果以上内容不足以回答您的问题,您需要提供更多详细信息