Sml 数字中的位数

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) =

我正在尝试用SML编写一个函数,它接受一个整数并输出该数字的位数。例如,用户输入122,我想输出3。我原以为这个函数会起作用,但我在子句不一致的结果约束方面遇到了一些错误。右边不一致,运算符和操作数不一致。我对ML很陌生,我不知道我做错了什么!提前谢谢

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];