位数

时间:2014-03-28 14:15:37

标签: oz mozart

我正在编写一个函数在Mozart-Oz中返回一个数字的镜像,例如

镜像(1234)将返回4321

所以无论如何我有这个想法,但我被卡住了因为我需要一个内置函数来返回一个整数的位数(返回一个整数)。 / p>

我尝试了{Length X}功能,但我不知道它返回了什么......

这是我的代码(不起作用)来理解我的问题的背景。

declare
fun {Mirror Int Acc}
if Int==0 then Acc
else {Mirror (Int div 10) (Int mod 10)*(10^({Length Int}-1))+Acc}end
end

{Browse {Mirror 1234 0}}

2 个答案:

答案 0 :(得分:1)

我会这样做的:

declare
fun{Mirror X Y}
   if X==0 then Y
   else {Mirror (X div 10) (X mod 10)+Y*10}
   end
end
{Browse {Mirror 1234 0}}

或者,如果您只想要一个参数:

declare
fun{Mirror X}
   fun{Aux X Y}
      if X==0 then Y
      else {Aux (X div 10) (X mod 10)+Y*10}
      end
   end
in
   {Aux X 0}
end
{Browse {Mirror 1234}}

答案 1 :(得分:0)

您可以通过转换为字符串并获取其长度来找到位数:

  NumDigits = {Length {Value.toVirtualString Int 10 10}}
BTW,^运算符与Oz具有不同的含义。您可能需要Pow函数。