0

我一直在尝试学习一些 Prolog Amzi。这是一个示例问题,我无法完全理解这个问题。

这是代码。

/* Facts */
parent(mary,tom).
parent(john,tom).
parent(mary,alice).
parent(john,alice).
sex(mary, female).
sex(john, male).
sex(tom, male).
sex(alice, female).
/* Rules */
mother(X):-
 sex(X,female),
 parent(X,_).
father(X):-
 sex(X, male),
 parent(X,_).
sibling(X,Y):-
 parent(M,X),
 sex(M,female),
 parent(F,X),
 sex(F,male),
 parent(M,Y),
 parent(F,Y).
sibling1(X,Y):-
 parent(M,X),
 sex(M,female),
 parent(F,X),
 sex(F,male),
 parent(M,Y),
 parent(F,Y),
 X \= Y.
go:-
 nl, nl,
 write('Hello there .....'), nl,
 write('Testing on Prolog2.'), nl,
 write('End Job'), n1.

该问题询问规则母亲(X)和父亲(X)中下划线的功能与输出示例。

我似乎不明白下划线在这种情况下的含义以及示例输出的含义。

4

1 回答 1

1

在任何情况下,匿名变量(用 表示_)表示一个参数,其具体值是不相关的。

例如,规则mother(X) :- sex(X, female), parent(X, _).规定X要成为母亲X必须是女性并且也是某人的父母(其姓名无关紧要,必须由匿名变量表示)。

匿名变量 ( _) 不绑定到值,它的多次出现并不意味着相等的值。

例如,考虑以下事实:

parent(mary, tom).
parent(mary, alice).
parent(john, tom).
parent(john, alice).

要了解玛丽的孩子是谁,您可以询问:

?- parent(mary, Who).
Who = tom ;
Who = alice.

要查明玛丽是否是某人的父母,您可以询问:

?- parent(mary, _).
true .

要了解是否有人是其他人的父母,您可以询问:

?- parent(_, _).
true .

要查明是否有人是自己的父母,你可以问:

?- parent(X, X).
false.
于 2022-03-03T23:24:40.847 回答