函数的内核语言表示

时间:2015-11-16 13:44:27

标签: oz

存根

N + {Add N - 1}的内核语言表示形式是什么
local I1 in

// the code

        end
    end
end

函数{Add N}的过程定义如下

proc {Add N R}
    if N == 0 then R = 0
    else N + {Add N - 1}
    end
end

2 个答案:

答案 0 :(得分:2)

在内核语言中,您必须为每个操作定义新的标识符。一个用于N-1操作,另一个用于检索过程Add的结果,第三个用于存储N + {Add N-1}的结果。您还必须单独声明每个局部变量。

所以你得到这样的东西:

local I1 in
   local I2 in
      local I3 in
         I1 = 1
         I2 = N - I1
         {Add I2 I3}
         R = N + I3
      end
   end
end

然后I3包含值N + {Add N-1}

答案 1 :(得分:0)

您可以使用Mozart IDE获取任何代码段的内核语言。

你必须在标签下找到Oz>核心语法>无论你想要什么代码转换成KL

它给出了

declare Add in
local UnnestApply1 UnnestApply2 in
   proc {Add N Result1}
      local IfArbiter1 UnnestApply3 in
     UnnestApply3 = 0
     IfArbiter1 = N == UnnestApply3
     if IfArbiter1 then
        Result1 = 0
     else
        local UnnestApply4 UnnestApply5 UnnestApply6 in
           UnnestApply6 = 1
           UnnestApply5 = N - UnnestApply6
           {Add UnnestApply5 UnnestApply4}
           Result1 = N + UnnestApply4
        end
     end
      end
   end
   UnnestApply2 = 4
   {Add UnnestApply2 UnnestApply1}
   {Browse UnnestApply1}
end

可能很难阅读,但该工具非常有用且功能强大