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