将列表添加为元素以生成列表列表

时间:2018-02-10 12:10:08

标签: list ocaml

对于我的作业,我需要返回给定树的列表列表。 enter image description here enter image description here

例如,给定这棵树,我们返回叶子的路径,0表示向左,1表示向右。目前,我相信我的功能是有道理的;但是,我不知道如何将列表放入列表列表中。我认为需要在问号所在的位置进行操作;但是我在网上看了一下,找不到任何东西。有没有这个操作?或者我必须创建自己的帮助函数?谢谢。

let rec dTree_path t = 
   match t with 
   | Leaf(x) -> []
   | Node(x, lt, rt) -> [ 0 :: (dTree_path lt) ] ?? [1 :: (dTree_path rt)];;

1 个答案:

答案 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返回的路径列表的每个路径。