【发布时间】:2014-12-18 10:44:13
【问题描述】:
我正在尝试实现递归算法求解河内塔 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/>
但是,它不能编译,因为 Sightly 不支持算术
像- 这样的运算符。我不需要从 3 数到 0,我们可以这样做
相反的方式,因为方向在这里并不重要。我只需要一些
一种具有以下特点的计数器:
- 我们可以增加或减少它,
- 我们可以检查是否等于零或某个常数。
我考虑过使用字符串。空字符串为零,'x' 为
1,“xx”将是 2,依此类推。我们可以检查一个字符串是否等于
号码(n == 'xxxx')。我们甚至可以使用 Sightly string
formatter 来增加它:
${'x{0}' @ format = [n]}
但是,上面的表达式不能用作参数
data-sly-call 或data-sly-test。我们只能显示它
立即,并且没有进一步的处理可用。
如果有一些我可以使用的计数器,你有什么其他想法吗?
【问题讨论】:
标签: math recursion aem sightly