0

大家好,我是 prolog 的新手,我正在尝试完成我的第一个项目。我有一个带有 3 个参数的家谱(family/3)(人(爸爸),人(妈妈),。列出所有孩子) .目前我的知识库中有 3 个家庭。我想要完成的是显示有 3 个以上孩子的母亲的名字。任何帮助都会很棒。这是到目前为止的代码。

family(person(tom,right,date(17,May,1950),works(mathematician)),person(ann,right,date(29,May,1951),unemployed),
[person(pat,right,date(5,May,1983),unemployed),person(max,right,date(15,May,1973),unemployed),[]]).

family(person(nick,wellbard,date(15,September,1954),works(electrician)),person(cathrine,wellbard,date(11,March,1957),unemployed),
[person(john,wellbard,date(15,May,1985),works(musician)),person(mike,wellbard,date(25,May,1989),unemployed),
person(chloe,wellbard,date(13,October,1991),unemployed),[]]).

family(person(john,brock,date(17,January,1951),works(programmer)),person(mary,brock,date(19,March,1952),works(teacher)),
[person(tony,brock,date(20,May,1975),unemployed),person(sasha,brock,date(1,April,1979),unemployed),
person(josh,brock,date(29,April,1982),unemployed),[]]).

我在想这样的事情,family(_,X,_):-[X,Y,Z|]这样我就可以显示至少有 3 个孩子的母亲的名字。请原谅我在 ProLog 的任何错误,任何帮助或指导都会很棒,谢谢 :)

4

2 回答 2

0

你在轨道上,或多或少......试试

mother_with_at_least_3_sons(M) :-
   family(_,M,[_,_,_|_]).

编辑如果您不能更改子列表,删除无用的 [] 最后,该规则实际上应该是

mother_with_at_least_3_sons(M) :-
   family(_,M,[_,_,_,_|_]).
于 2012-11-28T22:20:40.567 回答
0

这是我对你的问题的回答。

如果您找到一个有爸爸,妈妈,孩子的家庭,我们会“说”序言

% 其中 Kids 是一个包含 3 个以上元素的列表(通过 length 获得)

% 然后给我妈妈的名字和姓氏

more_than_three_children(MotherName,MotherSurname) :- family(Dad,Mom,Kids),
                                                      length(Kids,NumberOfKids),
                                                      NumberOfKids > 3,
                                                      Mom=person(MotherName,MotherSurname,_,_).

% 为了找到所有的母亲,我们可以使用 findall 谓词

% 第一个参数是 OBJECT ,我们使用 GOAL 创建对象的实例

% 第二个参数是目标。如果prolog“找到”一些满足该目标的结构

% 它将把它放在列表中(这是第三个参数)

mother_list(List) :- findall((MotherName,MotherSurname),more_than_three_children(MotherName,MotherSurname),List).
于 2012-11-28T22:36:39.253 回答