答案 0 :(得分:2)
这里我提供了一个手动实现尾递归的示例。 Tail recursion - Scala (any language else)
这是算法描述和评估分离的一个例子。
Recursive
trait仅描述了一些递归算法的迭代。
方法interpret
对算法的逻辑一无所知,只是运行它直到它完成。
例如,您可以在迭代之间引入延迟或限制迭代次数,而无需更改Recursive
中描述的算法。
答案 1 :(得分:1)
关键在于短语
从评估中分离程序描述
一个例子是使用由ADT(代表你的DSL的语法)和解释器代表的DSL。因为其他人可能比我更详细地描述了这一点,所以我只想链接到这里的一个例子:http://typelevel.org/cats/datatypes/freemonad.html
那个人使用的免费monad目前是一个有点热门的话题,但在我看来你表现得非常好。