Невозможно запустить код Моцарта

local MainSum in
  fun {MainSum N}
    local Sum in 
      fun {Sum N Acc} 
        if N==0 then Acc 
          else Acc+{Sum N-1 N*N} 
        end 
      end 
     {Sum 5 0}
     end
  end
end

Когда я попробую этот код, он показывает следующую ошибку

%************************** syntax error ************************
%**
%** nesting marker expected as designator of nested function
%**
%** in file "exercise.oz", line  2, column 7
%** ------------------ rejected (1 error)

1 ответ

Вы работаете с кодом на моем компьютере... Но вы не использовали аргумент MainSum

Я считаю, что это то, что вы хотели сделать:

local MainSum in
   fun {MainSum N}
      local Sum in 
         fun {Sum N Acc} 
            if N==0 then Acc 
            else Acc+{Sum N-1 N*N} 
            end 
         end 
         {Sum N 0}
      end
   end

   {Browse {MainSum 5}}
end

который можно написать, используя более краткую запись и используя терминальную рекурсию!

local
   fun{MainSum N}
      fun{Sum N Acc}
         if N==0 then Acc
         else {Sum N-1 N*N+Acc}
         end
      end
   in
      {Sum N 0}
   end
in
   {Browse {MainSum 5}}
end
Другие вопросы по тегам