我正在尝试在 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
。我们只能立即显示,无法进行进一步处理。
如果有一些我可以使用的计数器,您还有其他想法吗?