我正在尝试在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 :(得分: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不是一个有效的东西?