Невозможно запустить код Моцарта
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