我有一个定义树的跟随函数:
datatype 'a tree = leaf of 'a |
node of 'a tree * 'a tree;
fun cat(leaf(s)) = s
| cat(node(t1,t2)) = cat(t1) ^ " " ^ cat(t2);
cat函数用于连接输入到字符串树的字符串。 我知道它不是尾递归,因为定义使用函数本身进行递归。 现在我在想是否有任何方法可以通过尾递归方式实现它? 在此先感谢任何帮助。
答案 0 :(得分:0)
这是尾递归版
fun cat'(leaf(s), acc) = s^acc
| cat'(node(t1, node(t2, acc))
您也可以将其作为连续传递样式函数
fun cat'' (leaf(s)) k = k(s)
| cat'' (node(t1, t2)) k = cat''(t1) (fn res => k(res ^ cat''(t2)))
希望这有帮助!! :d