【问题标题】:tree tail recursive in SML/NJSML/NJ 中的树尾递归
【发布时间】:2018-03-05 10:10:06
【问题描述】:

我有一个定义树的函数:

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

【问题讨论】:

标签: sml smlnj


【解决方案1】:

这将是尾递归版本

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

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多