tree - SML使用reduce和map遍历n叉树
问题描述
我是 SML 的新手。
假设我有以下数据类型:
datatype 'a tree = leaf of 'a | node of 'a tree list
和功能val leaves = fn : 'a tree -> 'a list
:
fun leaves (leaf x) = [x]
| leaves (node []) = []
| leaves (node [x]) = leaves x
| leaves (node (x::xs)) = (leaves x) @ (leaves (node xs))
如果我有
val t = node [node [leaf 1,
node [leaf 2, leaf 3],
leaf 4]];
然后,leaves t
会回来[1, 2, 3, 4]
找我。
我想问的是,这可以用reduce
and重写map
吗?
鉴于减少:
fun reduce g [x] = x
| reduce g (x::xs) = (g x (reduce g xs))
非常感谢。
解决方案
您似乎有一个反复出现的模式,即从太多子句开始。
从两个必要的开始:
fun leaves (leaf x) = [x]
| leaves (node xs) = ???
现在,xs
是一个列表。
map
将列表转换为不同的列表。
reduce
将列表简化为单个值。
这表明你想要某种形式的东西
| leaves (node xs) = reduce f (map g xs)
确定f
并g
离开作为练习。
推荐阅读
- datatables - 带有 Word 输出的 Rmarkdown 中不会显示 DT 表
- javascript - Cypress 将一个 iframe 访问到另一个 iframe
- python - 访问约束的预定义列表
- python - AttributeError:“Column”对象和“Comparator”对象都没有属性“alter”
- java - JAVA中的不同方法
- php - 如果产品不简单,获取变体 SKU
- python-3.x - 使用 FritzConnection 更改 WIFI 密码
- sql - 向 SQL 查询添加参数
- python - Pandas bin 列并从另一列中查找计数
- android - Android 4.1 FLAVOR 和 BUILD_TYPE 问题