例如,给定这棵树,我们返回叶子的路径,0表示向左,1表示向右。目前,我相信我的功能是有道理的;但是,我不知道如何将列表放入列表列表中。我认为需要在问号所在的位置进行操作;但是我在网上看了一下,找不到任何东西。有没有这个操作?或者我必须创建自己的帮助函数?谢谢。
let rec dTree_path t =
match t with
| Leaf(x) -> []
| Node(x, lt, rt) -> [ 0 :: (dTree_path lt) ] ?? [1 :: (dTree_path rt)];;
我
答案 0 :(得分:1)
在进行功能类型明确指定的练习时,明确编写规范以使typechecker报告尽快出现是很有用的。在这种情况下,添加类型注释会在0::dTree_path lt
let rec dTree_path: 'any t -> int list list = fun x ->
match x with
| Leaf(x) -> []
| Node(x, lt, rt) -> [ 0 :: (dTree_path lt) ] …;;
错误:此表达式具有类型int列表列表 但是期望类型为int list的表达式 类型int列表与类型int
不兼容
事实上,您的函数的当前问题是0 :: (dTree_path lt)
对您的规范没有意义:dTree_path
是一个int列表(即路径列表),但是您要将一个int元素附加到此列表中。
提示:您要做的是将0
附加到dTree_path
返回的路径列表的每个路径。