Ocaml 什么是谓词和差异列表?

Ocaml 什么是谓词和差异列表?,ocaml,Ocaml,我正在做,不太理解这个问题中的一些术语 二叉树的字符串表示形式。(中等) 有人将二叉树表示为以下类型的字符串(参见示例):“a(b(d,e),c(,f(g))” 如果树像往常一样给定(如Empty或Node(x,l,r)term),那么编写一个OCaml函数来生成这个字符串表示形式 然后写一个函数来做这个逆运算;i、 e.给定字符串 表示,以通常的形式构造树 最后,将两个谓词组合在一个函数中 树字符串,可在两个方向上使用 使用差异列表和 单谓词树\u dlist,用于在树之间进行转换 以及两

我正在做,不太理解这个问题中的一些术语


二叉树的字符串表示形式。(中等)

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

  • 如果树像往常一样给定(如
    Empty
    Node(x,l,r)
    term),那么编写一个OCaml函数来生成这个字符串表示形式
  • 然后写一个函数来做这个逆运算;i、 e.给定字符串 表示,以通常的形式构造树
  • 最后,
    将两个谓词组合在一个函数中
    树字符串
    ,可在两个方向上使用
  • 使用
    差异列表
    和 单谓词树\u dlist,用于在树之间进行转换 以及两个方向的差异列表
  • 为简单起见,假设节点中的信息是单个字母,并且字符串中没有空格


    以下是我的问题:

  • 在这个问题中,
    谓词
    是什么意思
  • 对于第三点,它要求生成一个可以在两个方向上使用的函数,即可以接受树并输出字符串,或者接受字符串并输出树。我应该使用
    functor
    或类似的东西吗
  • 我完全不明白第四点。什么是差异列表

  • 这些问题最初是打算用Prolog来解决的,这解释了我认为的术语

    在Prolog中,谓词可以表示两类值之间的相等(或者同构是更好的词?),这样,如果有一个排序的值,它实际上可以计算另一个排序的值。也就是说,它是一个双向函数。如何在OCaml中编码这一点还不清楚。也许你应该看看答案


    差异列表是一种Prolog数据结构。这里有一个SO页面似乎可以解释它们(我很快在谷歌上搜索):

    您认为OCaml中有一个不同的列表吗?或者它在OCaml中有意义或有用吗?请您也看一看好吗?我认为您可以使用lazness(
    lazy
    ,在OCaml中)列出Prolog语义的差异列表,但它非常复杂,不值得。