Функции и процедуры по-разному ведут себя с одним и тем же кодом в Моцарте Оз?

Я пытаюсь распечатать последовательность Фибоначчи в Oz, используя 2 подхода: функция и процедура с использованием Emac в качестве редактора. Процедура идет здесь:

declare 
fun {Fibo N} 
   case N of 
      1 then 1 
   [] 2 then 1
[] M then {Fibo (M-1)} + {Fibo (M-2)} 
   end 
end 
declare
proc {Loop K}
   if K ==1 then  {Browse K}
   else
      {Loop K-1}
       {Browse {Fibo K}}
   end
end
{Loop 10}

и функция:

declare 
fun {Fibo N} 
   case N of 
      1 then 1 
   [] 2 then 1
[] M then {Fibo (M-1)} + {Fibo (M-2)} 
   end 
end
declare
fun {Loo L}
   if L ==1 then  {Browse L}
   else
      {Loo L-1}
       {Browse {Fibo L}}
   end
end
{Loo 10}

Проблема в том, что работает только процедура "Цикл". Результат:

1
1
2
3
5
8
13
21
34
55

Функция "Loo" не работает и выдает несколько трудных для понимания ошибок:

%********************** static analysis error *******************
%**
%** illegal arity in application
%**
%** Arity found:          1
%** Expected:             2
%** Application (names):  {Loo _}
%** Application (values): {<P/2> _<optimized>}
%** in file "Oz", line 13, column 6

%********************** static analysis error *******************
%**
%** illegal arity in application
%**
%** Arity found:          1
%** Expected:             2
%** Application (names):  {Loo _}
%** Application (values): {<P/2> 10}
%** in file "Oz", line 17, column 0
%** ------------------ rejected (2 errors)

Я до сих пор не знаю почему. На мой взгляд, функция и процедура имеют аналогичный эффект в OZ.

7
задан Benjamin 29 July 2014 в 16:50
поделиться