#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}}
Это всего лишь пример, он дает треугольную последовательность в обратном порядке, вы можете легко исправить это по своему желанию.