0

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
4

2 回答 2

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}

于 2015-11-16T14:58:52.677 回答
0

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

你只需要进入选项卡 Oz > Core Syntax > 不管你想翻译成 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

可能很难阅读,但该工具确实很有帮助且功能强大

于 2016-02-05T12:50:06.340 回答