树尾在SML / NJ中递归

时间:2018-03-05 10:10:06

标签: sml smlnj

我有一个定义树的跟随函数:

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函数用于连接输入到字符串树的字符串。 我知道它不是尾递归,因为定义使用函数本身进行递归。 现在我在想是否有任何方法可以通过尾递归方式实现它? 在此先感谢任何帮助。

1 个答案:

答案 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