Sml 数字中的位数
我正在尝试用SML编写一个函数,它接受一个整数并输出该数字的位数。例如,用户输入122,我想输出3。我原以为这个函数会起作用,但我在子句不一致的结果约束方面遇到了一些错误。右边不一致,运算符和操作数不一致。我对ML很陌生,我不知道我做错了什么!提前谢谢Sml 数字中的位数,sml,Sml,我正在尝试用SML编写一个函数,它接受一个整数并输出该数字的位数。例如,用户输入122,我想输出3。我原以为这个函数会起作用,但我在子句不一致的结果约束方面遇到了一些错误。右边不一致,运算符和操作数不一致。我对ML很陌生,我不知道我做错了什么!提前谢谢 fun num_digits nil = nil | num_digits 0 = 1 | num_digits n = let val x = 1 fun f(z, a) =
fun num_digits nil = nil
| num_digits 0 = 1
| num_digits n =
let
val x = 1
fun f(z, a) =
let
val c = z+1
val m = a div 10
in
if m >= 1
then
f(c, m)
else z
end;
in
f(x, n)
end;
这解决了整个问题 乐趣数字0=1 |数字n=
删除数字nil=nil修复了它。不确定这是为什么导致问题。。。可能是因为传入一个int并接收nil是无效的?如果有可用的数学函数,并且是我们正在讨论的正整数,那么这将实现以下目的:
digits = floor(log10(number))+1
Zero必须单独处理。nil是[](一个空列表)
如果定义一个函数,如:
fun f nil = nil
| f x = 3;
这会导致语法错误,因为int和list混淆了
但是,以下示例很好,因为类型完全匹配:
fun f nil = 2
|f x = 3;
或
fun f nil = nil
| f x = [3];