Sml 在变量中保持maxInt(标准ML)

Sml 在变量中保持maxInt(标准ML),sml,ml,Sml,Ml,如何将整数的最大值放入SML中的val中? 我看到您可以使用intMax: > Int.maxInt; val it = SOME 1073741823 : int option 但如果我尝试将其作为值放入val,它将打印错误: > val max:int = Int.maxInt; Error: pattern and expression in val dec don't agree [tycon mismatch] pattern: int expression:

如何将
整数的最大值
放入SML中的val中?
我看到您可以使用
intMax

> Int.maxInt;
val it = SOME 1073741823 : int option
但如果我尝试将其作为值放入
val
,它将打印错误:

> val max:int = Int.maxInt;
Error: pattern and expression in val dec don't agree [tycon mismatch]
pattern:    int
expression:    int option
in declaration:
max : int = Int.maxInt
虽然
val max=Int.maxInt
可以工作,但它使:
val max=1073741823:Int选项

我希望变量是
int
类型,而不是
int option

换句话说,输出应为:

> val max = 1073741823 : int
编辑:

谢谢你的回答。是否可以将值设置为大于maxInt? 我想计算一下:

fun someCalculation num = ceil((Math.sqrt(1.0+8.0*real(num))-1.0)/2.0);
val max_int = Option.valOf Int.maxInt;
val current = someCalculation max_value;
因为
8.0*real(maxInt)
它不会工作。可以计算吗?请注意,最终答案不大于maxInt

如何在SML中将整数的最大值放入val

您可以使用
option.valOf:'a option->'a
删除“option”部分:

- val max = valOf Int.maxInt;
> val max = 1073741823 : int
使用
valOf
通常不安全,因为
valOf NONE
会引发异常:

- valOf NONE;
! Uncaught exception:
! Option
只有当编译器的未来版本附带任意大小的
Int
模块时,才会发生这种情况。由于SML/NJ已经作为一个单独的模块存在,这可能不会马上发生

是否可以将值设置为大于maxInt

不使用int(太小):

并且不使用真实的(太不精确):

但是使用
IntInf
库,是:

- IntInf.maxInt;
> val it = NONE : int option

- IntInf.fromInt (valOf Int.maxInt) * 8;
> val it = 8589934584 : IntInf.int
如您所见,SML/NJ重载整数文本,因此它们既可以作为int(read:Int31.int)使用,也可以作为IntInf.int使用

如何在SML中将整数的最大值放入val

您可以使用
option.valOf:'a option->'a
删除“option”部分:

- val max = valOf Int.maxInt;
> val max = 1073741823 : int
使用
valOf
通常不安全,因为
valOf NONE
会引发异常:

- valOf NONE;
! Uncaught exception:
! Option
只有当编译器的未来版本附带任意大小的
Int
模块时,才会发生这种情况。由于SML/NJ已经作为一个单独的模块存在,这可能不会马上发生

是否可以将值设置为大于maxInt

不使用int(太小):

并且不使用真实的(太不精确):

但是使用
IntInf
库,是:

- IntInf.maxInt;
> val it = NONE : int option

- IntInf.fromInt (valOf Int.maxInt) * 8;
> val it = 8589934584 : IntInf.int

如您所见,SML/NJ重载整型文字,因此它们既可以作为int(读:Int31.int)也可以作为IntInf.int。

如果您的问题与其他问题有关,请提出一个新问题,并思考您想问什么,这样您就不必一直更改它。:-)如果您的问题与其他问题有关,请提出一个新问题,并思考您想问什么,这样您就不必一直更改它。:-)