синтаксическая ошибка, неожиданный T_end, ожидание T_the

#oz #mozart

#oz #моцарт

Вопрос:

Я новичок в OZ Mozart, я пытаюсь написать треугольную последовательность, но программирование не будет работать.

 declare
fun {Sequence N R}
   fun {Help I}
      if I < N
     sum = {Int.toFloat(N*(N 1)/2.0)}
     %I   1
     case R of nil then {Append [sum] nil}
     [] H|T then sum|H|T
     end
     I 1
      end
   end
in
   {Help 0}
end

declare
{Browse {Sequence 5 nil}}
 

Если что-то не так с моим программированием?
Он показывает ошибку, как:

 %*************************** parse error ************************
%**
%** syntax error, unexpected T_end, expecting T_then
%**
%** in file "c:/Users/admin/Desktop/test (2).oz", line 11, column 6
%** ------------------ rejected (1 error)
 

Есть идеи по этому поводу?
Спасибо

Ответ №1:

Если я хорошо понял, что такое треугольная последовательность, followinf — простая реализация. Но прежде всего ваша ошибка означает, что вы должны использовать then ключевое слово в if инструкции. Преобразование типа из float в int не требуется, поскольку каждое число, умноженное на его преемника, дает нечетное число. Это упрощает управление переменными. Вот что я предлагаю:

 declare

fun {Sequence N}
   local X in
     if N>0 then
      X = (N*(N 1) div 2)
      X|{Sequence N-1}
     else nil
     end
    end
 end

{Browse {Sequence 5}} 
 

Это всего лишь пример, он дает треугольную последовательность в обратном порядке, вы можете легко исправить это по своему желанию.