prolog - 如何正确书写祖父母规则
问题描述
这是我第一次使用 prolog 的家庭作业,我以为我知道自己在做什么,但是当我写一个查询时,它说“程序 `parent(A,B)' 不存在可从:祖父母 (A,B) 访问”。
female(jane).
female(mary).
female(clare).
female(vivian).
female(alice).
female(sarah).
female(rachel).
male(floyd).
male(tom).
male(richard).
male(calvin).
male(john).
male(andrew).
parent_of(tom, richard).
parent_of(tom, jane).
parent_of(mary, calvin).
parent_of(mary, alice).
parent_of(clare, john).
parent_of(clare, tom).
parent_of(john, alice).
parent_of(john, calvin).
parent_of(richard, vivian).
parent_of(richard, floyd).
parent_of(jane, sarah).
parent_of(jane, rachel).
parent_of(jane, andrew).
grandparent(X,Z):-parent(X,Y),parent(Y,Z).
sister_of(X,Y):-parent(Z,X),parent(Z,Y),female(X),X\==Y.
brother_of(X, Y):-parent(Z,X),parent(Z,Y),male(X),X\==Y.
解决方案
您将谓词声明为
parent_of/2
再看看你的代码
parent_of(tom, richard).
parent_of(tom, jane).
parent_of(mary, calvin).
parent_of(mary, alice).
parent_of(clare, john).
parent_of(clare, tom).
[...]
因此,您还必须在祖父母谓词中使用 parent_of,如下所示:
grandparent(X,Z):-parent_of(X,Y),parent_of(Y,Z).
请注意,您还必须更改以下谓词(sister_of 和 Brother_of):
sister_of(X,Y):-parent_of(Z,X),parent_of(Z,Y),female(X),X\==Y.
brother_of(X, Y):-parent_of(Z,X),parent_of(Z,Y),male(X),X\==Y.
推荐阅读
- intellij-idea - IntelliJ IDEA Find In Path 默认显示“946F 0E59 9E52 7AA9 8D2D 1EDE EB65 7E8D E028 51F6”,此默认值不能更改
- xamarin.forms - 我的适用于 Android 的 Xamarin.Forms 应用不再需要存储权限,但它继续显示在设置应用管理器中
- jenkins - 在groovy中检索jenkins job builder凭据
- swift - 包装在“DEBUG”预处理器中的代码是否有条件剥离以用于发布版本?
- r - 在 dplyr 中加入各种摘要
- django - 递归创建对象
- java - 程序在应该中断时继续
- javascript - 在 node.js 中生成 python ENOENT
- kotlin - 在声明挂起函数时传达预期的线程类型(IO、默认、主线程)
- ios - Xcode 10.0。如何增加 UIview 中的子视图大小