Tree OCaml:绘制二叉树

Tree OCaml:绘制二叉树,tree,ocaml,draw,Tree,Ocaml,Draw,我正在使用树编写一些程序。我想知道是否有代码可以在OCaml中绘制通用树 type Tree = Node of Tree * int * Tree | Child of int;; 我在网上找到的都是Caml灯光,而不是客观的Caml。 提前谢谢。你能澄清一下“画画”是什么意思吗?我想你在想一个树的图形可视化 我在工具使用的点格式生成图形/树描述方面有相当好的经验。其思想是,OCaml程序以这种格式生成图形的文本表示,然后使用外部工具进行渲染(将其转换为图像),并可能在屏幕上显示它 Dot适

我正在使用树编写一些程序。我想知道是否有代码可以在OCaml中绘制通用树

type Tree = Node of Tree * int * Tree | Child of int;;
我在网上找到的都是Caml灯光,而不是客观的Caml。

提前谢谢。

你能澄清一下“画画”是什么意思吗?我想你在想一个树的图形可视化

我在工具使用的点格式生成图形/树描述方面有相当好的经验。其思想是,OCaml程序以这种格式生成图形的文本表示,然后使用外部工具进行渲染(将其转换为图像),并可能在屏幕上显示它

Dot适用于一般图形。虽然您可能会找到具有更多特性的二叉树专用工具,但根据我的经验,它可以很好地处理所有类型的树,并显示您通常喜欢的内容。现在这个工具并非没有缺陷,我在某些情况下遇到了bug(调用
dot
segfaults)。我仍然认为这是一个合理的选择

如何以
dot
格式具体输出:选择任何一个已经存在的图形,其结构将非常明显:它只是一种文本格式。然后编写代码,在图形结构上运行,调用
Printf
,使用正确的标签等内容,瞧。例如,看起来不错,并且是源格式。我引述有关部分:

/* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */
digraph unix {
    size="6,6";
    node [color=lightblue2, style=filled];
    "5th Edition" -> "6th Edition";
    "5th Edition" -> "PWB 1.0";
    "6th Edition" -> "LSX";
    "6th Edition" -> "Interdata";
    "Interdata" -> "Unix/TS 3.0";
    "Interdata" -> "PWB 2.0";
    "Interdata" -> "7th Edition";
    "7th Edition" -> "8th Edition";
    "7th Edition" -> "32V";
    "7th Edition" -> "V7M";
    "V7M" -> "Ultrix-11";
    "8th Edition" -> "9th Edition";
    [...]
}

使用
图形
库来绘制树通常非常简单和有趣,如果它简单且不太深的话

如果需要文本表示,请执行以下操作:

type tree = Node of tree * int * tree | Child of int;;
let draw tree =
  let rec print indent tree =
    match tree with
       Child n -> 
        Printf.printf "%s%d\n" indent n
     | Node (left, n, right) ->
        Printf.printf "%s----\n" indent;
        print (indent ^ "| ") left;
        Printf.printf "%s%d\n" indent n;
        print (indent ^ "| ") right;
        Printf.printf "%s----\n" indent
  in
  print "" tree

我已经编辑了你的问题,以获得更好的格式。请注意,“Objective Caml”这个名称现在已经被贬低了,我们鼓励人们只说“OCaml”(因为“Objective”部分在日常使用中并不十分突出,而且经常与“Objective C”混淆)。嗯,[树是图形][1],所以[1]:谢谢,这正是我需要的。但不幸的是,这对我不起作用。这是安装后我得到的(我使用的是linux):警告:无法加载“/usr/lib/graphviz/libgvplugin_neato_layout.so.6”-未找到文件警告:无法加载“/usr/lib/graphviz/libgvplugin_xlib.so.6”-未找到文件/tmp/alpm_ygcg87/。安装:第1行:16840分段错误usr/bin/dot-c错误:命令无法执行correctly@maroxe:这看起来像是分发更新问题;肯定与OCaml无关,甚至可能与graphviz无关(可能是
libc
version问题或是什么鬼东西)。关于这个特定的问题,你应该试试你的本地archlinux帮助论坛。我正在寻找一个工具,它可以自动绘制(不管怎样,ascii表示就足够了)基于文本描述的树,可以很容易地生成。很容易吗?画二叉树在我看来相当混乱。我不想使用
图形
,而是尝试使用一个能够提供更高抽象级别的
metapost
的OCaml接口;或者至少是一个
cairo
绑定。@gashe:绘制二叉树实际上非常简单。从左上角开始,在当前位置的右侧绘制“右”子项,记住该框的高度
h
,然后在下方的
(x,y+h)处绘制“左”子项