什么是谓词和差异列表?

时间:2014-02-25 10:17:05

标签: ocaml

我正在做OCaml 99,并且不太明白这个问题中的一些术语。


二叉树的字符串表示形式。 (介质)

enter image description here

有人将二叉树表示为以下类型的字符串(参见示例):“a(b(d,e),c(,f(g,)))”。

  1. 编写一个生成此字符串表示形式的OCaml函数,如果树像往常一样(EmptyNode(x,l,r)个术语)。
  2. 然后写一个执行此操作的函数;即给出字符串 表示,以通常的形式构建树。
  3. 最后,combine the two predicates in a single function tree_string可以在两个方向上使用。
  4. 使用difference lists和a编写相同的谓词tree_string 单个谓词tree_dlist,它执行树之间的转换 和两个方向的差异列表。
  5. 为简单起见,假设节点中的信息是单个字母,并且字符串中没有空格。


    以下是我的问题:

    1. predicate在这个问题中意味着什么?
    2. 对于第3点,它要求创建一个可以在两个方向上使用的功能,即,可以接受树并输出字符串或接受字符串并输出树。我应该使用functor或类似的东西吗?
    3. 我完全无法理解第四点。什么是difference lists

1 个答案:

答案 0 :(得分:1)

这些问题原本打算在Prolog中解决,它解释了我认为的术语。

在Prolog中,谓词可以表示两种值之间的相等(或者同构是一个更好的词?),这样如果你有一种值,它实际上可以计算另一种值的值。即,它作为双向函数起作用。目前还不清楚如何在OCaml中编写代码。也许你应该查看答案?

差异列表是Prolog数据结构。这是一个SO页面似乎解释了他们(我用Google搜索很快):Understanding difference lists (Prolog)