|
|
|
^macro_use
Судя по тесту (а ты бы и сам мог его провести, лентяй), он реагирует неплохо - на определенном этапе выводит [infinite operator recursion detected], что в моем случае оказалось верно.
Называется это явление рекурсией и позволяет, например, строить форумные иерархии.
Вот так выглядят ханойские башни на парсере:
#ханойские башни, рекурсивный алгоритм
#условия задачи и способ решения см., например,
#здесь: http://www.cut-the-knot.com/recurrence/hanoi.html
@move[n;a;b;c] рекурсивный макрос
^eq[$n;1;
^var[cnt;+;1]
$a &#151^;>^; $b
;
^macro[move;^eval[$n-1];$a;$c;$b]
^macro[move;1;$a;$b;$c]
^macro[move;^eval[$n-1];$c;$b;$a]
]
@main[] стартовый макрос
#определен ли параметр?
^var[n;^cmp[^number[number];0;0;0;^number[number]]]
^var[n;^cmp[^number[number];11;^number[number];0;0]]
#число дисков по умолчанию
^eq[^var[n];0;^var[n;5]]
#названия стержней
^var[a;A]
^var[b;B]
^var[c;C]
#счетчик перестановок
^var[cnt;0]
#старт
<html>
<head>
<title>Ханойские башни с ^var[n]&nbsp^; дисками (рекурсивный&nbsp^;алгоритм)</title>
</head>
<body bgcolor=white>
<h3>Ханойские&nbsp^;башни с ^var[n]&nbsp^;дисками (рекурсивный&nbsp^;алгоритм)</h3>
<pre>
^macro[move;^var[n];^var[a];^var[b];^var[c]]
-----------------------------
Всего перестановок: ^var[cnt]
</pre>
</body>
|