两个阶乘定义17 Mar 2025 | 4 分钟阅读 它用于找出阶乘函数。这些定义的陈述如下: 在 prolog 中,这个程序有两个子句。第一个子句没有主体,它是一个单元子句。prolog 的第二个子句有一个主体。在 '-' 的右侧,第二个子句的主体存在。符号 '-' 将被读作“如果”。主体由文字组成,这些文字可以使用逗号 ',' 分隔。符号 '.' 将被读作“和”。如果子句是一个单元子句,那么类的头部将是整个类。否则,子句中出现在“:-”冒号左侧的部分将是类的头部。第一个子句(单元子句)用于表明“0 的阶乘是 1”。第二个子句用于表明“如果 N>0,N 的阶乘是 F,则 N1 是 N-1,N1 的阶乘是 F1,F 是 N*F1”。 在 prolog 中,如果我们找到 3 的阶乘,它将以 W 值响应。 现在我们将为 factorial(3, W) 构建以下子句树。子句树有一个变量实例,但它没有任何自由变量。在原始程序中,每个分支都可以由节点下的一个子句确定。使用子句的头部实例,可以确定树的节点。在子句树中,节点的子节点可以由子句的主体文字确定。 ![]() 评估后,我们可以说所有算术叶子都是正确的。在上面的树中,最低的链接对应于阶乘程序的第一个子句。程序的第一个子句将写成 ?- true 是一个 prolog 目标,它总是成功的。 在树的根部,程序中的子句树提供了程序对目标的含义。factorial(3, 6) 有一个子句树,并且 factorial(3,6) 的所有叶子都为真,这就是为什么 factorial(3, 6) 是 prolog 程序的推论。字面量 factorial(7, 3) 没有子句树,并且具有所有真叶,这就是为什么 factorial(7, 3) 不是 prolog 程序的推论。对于字面量 factorial(7, 3),程序的含义表明它是错误的。 程序的子句树也称为 AND 树。如果子树以字面量为根,根是程序的推论,并且所有子树也将是程序的推论。现在我们知道子句树给了我们一个含义。 现在我们将区分 prolog 推导树和程序子句树。在 prolog 中,推导树基于变量绑定机制。它也基于子目标考虑的顺序。程序的子句树是静态的。子句树是为程序绘制的。子句树只是程序的声明性读取。 prolog 变量如何绑定通过 prolog 跟踪的执行来满足目标来显示。prolog 跟踪器的开启和关闭显示在以下示例中 为了找到 Prolog 目标 'factorial(3, X)',以下动画树描述了对推导树的另一种看法。单击“步进”按钮开始动画。 在本节中,标题引用了两个阶乘定义。在这里,我们显示相同的谓词名称,但有三个变量。 为此版本指定以下目标。 在定义中,累积参数由第二个参数显示。 |
我们请求您订阅我们的新闻通讯以获取最新更新。