嗨,大家好我是prolog的新手,我正在努力完成我的第一个项目。我有一个家庭树(家庭/ 3)有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的任何错误,任何帮助或指导都会很棒,谢谢:)
答案 0 :(得分:0)
你正在走上正轨,或多或少...... 尝试
mother_with_at_least_3_sons(M) :-
family(_,M,[_,_,_|_]).
编辑如果您无法更改子列表,最后删除无用的[],则规则应该实际读取
mother_with_at_least_3_sons(M) :-
family(_,M,[_,_,_,_|_]).
答案 1 :(得分:0)
这是我对你问题的回答。
%如果您找到一个有爸爸,妈妈,孩子的家庭
,我们会“说”%其中,儿童是一个包含3个以上元素的列表(按长度获得)
%然后给我妈妈的姓名
more_than_three_children(MotherName,MotherSurname) :- family(Dad,Mom,Kids),
length(Kids,NumberOfKids),
NumberOfKids > 3,
Mom=person(MotherName,MotherSurname,_,_).
%为了找到所有母亲,我们可以使用findall谓词
%第一个参数是OBJECT,我们使用GOAL创建对象的实例
%第二个参数是GOAL。如果prolog“找到”某个满足该目标的结构
%它会将它放在列表中(这是第三个参数)
mother_list(List) :- findall((MotherName,MotherSurname),more_than_three_children(MotherName,MotherSurname),List).