数字中的位数

时间:2014-10-01 03:30:09

标签: 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) =
            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;

3 个答案:

答案 0 :(得分:2)

如果有可用的数学函数且我们正在谈论它是正整数,那就可以了:

digits = floor(log10(number))+1

零必须单独处理。

答案 1 :(得分:1)

nil是[](空列表)。

如果您定义了如下函数:

fun f nil = nil
| f x = 3;

这导致语法错误,因为int和list混合在一起。

但是以下示例很好,因为类型完全匹配:

fun f nil = 2
|f x = 3;

或者

fun f nil = nil
| f x = [3];

答案 2 :(得分:0)

这解决了整个问题

有趣的num_digits 0 = 1 | num_digits n =

删除num_digits nil = nil修复它。不知道为什么会导致这个问题...也许是因为传入一个int并且收到nil不是一个有效的东西?