Существует как минимум две проблемы с вашим кодом:
Во-первых, существует простая проблема с приоритетом оператора:
if(n = 0) then "\n" else "*"^makeTriangle(n-1)
анализируется как
(if(n = 0) then "\n" else "*") ^ makeTriangle(n-1)
чем вы предполагали
if(n = 0) then "\n" else ("*" ^ makeTriangle(n-1))
Решение заключается в том, чтобы заключить необходимые скобки.
Другая проблема - блуждающая линия triangle(x-1)
в нижней части функции.Это не связано с кодом выше.Если вы намереваетесь объединить его с результатом вызова функции makeTriangle(x)
, вам необходимо выполнить явное объединение.После определения end
в вашем определении функции не должно быть ничего, поскольку end
завершает часть else
.
Незначительная проблема: поскольку ваша функция makeTriangle
вставляет "\n"
, вашакод (после исправления) будет иметь два "\n"
в нижней части треугольника.Если это не то, что вы хотите, возможно, вы можете подумать о базовом случае (n=0
).