【问题标题】:Ternary Tree methods - Standard ML三叉树方法 - 标准 ML
【发布时间】:2017-03-07 18:16:28
【问题描述】:

三叉树类型定义为:

datatype ’a tree =
Leaf of ’a
| Node of ’a tree * ’a tree * ’a tree

我需要修改函数 map & foldl 以匹配三叉树...

fun tree_map (f : ’a -> ’b) (t : ’a tree) : ’b tree = 
f,nil) = nil 
| map (f,x::xs) = f(x) :: (map (f,xs))


fun tree_foldl (f : ’a * ’a -> ’a) (n: ’a) (t : ’a tree) : ’a = 
(f,ie,nil)   = ie
 |  foldl (f,ie,x::xs) = foldl (f, f(x,ie), xs);

我知道这可能是一个简单的修改,但我似乎无法理解逻辑。我不明白二叉树会有什么不同......任何指针?

【问题讨论】:

    标签: functional-programming sml ml ternary-tree


    【解决方案1】:

    在代数数据类型上定义函数时,一个好的起点是为每种情况使用一个“匹配模式”。

    我会这样开始,因为基本情况(相当)明显:

    fun tree_map f (Leaf x) = Leaf (f x)
      | tree_map f (Node (t1, t2, t3)) = Node (something involving t1, t2, and t3) 
    
    fun tree_foldl f ie (Leaf x) = f(ie, x)
     |  tree_foldl f ie (Node (t1, t2, t3)) = ... something involving t1, t2, and t3 ... 
    

    有趣的部分留作练习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2018-04-09
      相关资源
      最近更新 更多