Я пытаюсь реализовать алгоритм рекурсивного алгоритма Tower of Hanoi проблема в зрелищном. Я знаю, что этот подход может не иметь много очевидных практических приложений , я рассматриваю его как загадку. Я в конечном итоге с чем-то так:Как реализовать Башня Ханоя в AEM Sightly
<sly data-sly-template.step="${@ n, src, aux, dst}" data-sly-unwrap>
<sly data-sly-test="${n > 0}" data-sly-unwrap>
<sly data-sly-call="${step @ n = (n-1), src = src, aux = dst, dst = aux}" data-sly-unwrap/>
${src} -> ${dst}<br/>
<sly data-sly-call="${step @ n = (n-1), src = aux, aux = src, dst = dst}" data-sly-unwrap/>
</sly>
</sly>
<sly data-sly-call="${step @ n = 3, src = 'A', aux = 'B', dst = 'C'}" data-sly-unwrap/>
Однако он не компилируется как красивый не поддерживает арифметических операторов как -
. Мне не нужно считать от 3 до 0, мы можем сделать это напротив, так как направление здесь не имеет значения. Мне просто нужно немного вид счетчика со следующими характеристиками:
- мы можем увеличивать или уменьшать его,
- мы можем проверить, равен нулю или какой-то постоянное число.
Я думал об использовании. Пустая строка будет равна нулю, «x» будет 1, «xx» будет 2 и так далее. Мы можем проверить, соответствует ли строка номеру (n == 'xxxx'
). Можно даже увеличивать его, используя красивый string formatter:
${'x{0}' @ format = [n]}
Однако приведенное выше выражение не может быть использован в качестве параметра в data-sly-call
или в data-sly-test
. Мы можем отображать его только и дальнейшая обработка недоступна.
Есть ли у вас какие-либо другие идеи, если есть счетчик, который я могу использовать?