Prolog问题。变量的问题(我是否需要它们)

问题描述 投票:0回答:1

我正在为班级做期末作业,我想知道是否有人能指导我如何处理我剩下的这两个问题(C和D)。这是我现在的情况。我不是在找直接的答案。谁能用一个例子来指导我。我已经做了a和b的作业,就是找到所有就业的孩子和没有孩子的家庭的名字。给了我们一些实用函数,所以我们不必每次都定义一个孩子的例子。这里是家庭树数据的例子。它很长,所以我在这里只附上了一个家庭。

family(
        person(melvin, brown, date(25,april,1950), unemployed),
        person(alice, brown, date(2,september,1967), works(hom, 78000)),
        [person(bill, brown, date(18,november,1990), unemployed),
         person(grace, brown, date(18,november,1990), works(ibm, 55000)),
         person(barbara, brown, date(18,november,1990), unemployed),
         person(walter, brown, date(3, october, 1996), unemployed)] ).

这些是为我们定义的实用程序。

del(X, [X|Tail], Tail).

del(X, [Y|Tail], [Y|Tail1]) :- del(X, Tail, Tail1). 

husband(X) :- family(X, _, _).

wife(X) :- family(_, X, _).

child(X) :- family(_, _, Children), member(X, Children). 

exists(Person) :- husband(Person); wife(Person); child(Person).

dateofbirth(person(_, _, Date, _), Date).

salary(person(_, _, _, works(_, S) ), S).  % Salary of working person

salary(person(_, _, _, unemployed), 0). % Salary of unemployed

这是我目前的工作:

(a) 没有孩子的家庭的名字

? - family(_, person(Name, Surname, _, _), [])

(b) 所有就业儿童

? – child(person(Name, Surname, _, works (_, _)))

(c) 有就业妻子和失业丈夫的家庭的名字;

? – wife(person), 

family(_, person(Name, Surname, _, works (_, _)));

husband(person),

family(_, person(Name, Surname, _, unemployed))) 

(d) 父母年龄相差至少15岁的所有子女; (e) 父母年龄相差至少15岁的所有子女。

  • 我真的不知道该从何说起。因为我不明白你怎么能从逻辑上减去父母的年龄。我不知道这是否有意义
prolog
1个回答
1
投票

关于(c),你应该用大写字母表示变量,这将是 wife(WifePerson) 否则你的子查询 wife(person) 不能成功)。) 或者你也可以写 wife(person(Name,Surname,_,_....). 说到这里,你的疑问中的谓语妻子和丈夫完全是多余的。然而,我个人更愿意写成

family(Husband,Wive,_),Wive = person(_,_,_,works(_,_));false.

或妻子。

关于(d),有一个花哨的答案,要求利用皮诺公理写出父母的年龄。这将是一个很酷的功课。这个想法是

nat(0). % zero is a natural number
nat(s(X)) :- nat(X). every successor of a natural number is a natural number

现在你可以将减法定义为

sub(nat(X),nat(0),nat(X)).
sub(nat(s(X),nat(s(Y),Result) :- sub(nat(X),nat(Y),Result)

但似乎年代的定义是以一种懒惰的方式完成的.因此,你可以利用不定式谓词 is/2 而只写

  AgeDiff is X - Y.
© www.soinside.com 2019 - 2024. All rights reserved.