2015-11-27 1 views
0

j'ai écrit 4 familles avec des listes et des règles après comme celui-ci:Prolog: Beaucoup de familles écrites avec des listes. Questions réponses que pour la dernière famille writen

 family(
person(tom, fox, date(7,may,1960), works(bbc, 15200)), 
person(ann, fox, date(9,may,1961), unemployed), 
[ person(pat, fox, date(5,may,1983), unemployed), 
    person(jim, fox, date(5,may,1983), unemployed) ]). 


    family(
person(chris, adler, date(1,jan,1965), works(rekit, 23000)), 
person(mary, adler, date(7,apr,1968), works(dia, 9500), 
[ person(john, adler, date(19,apr,1995), unemployed), 
    person(randal, adler, date(22,nov,1992), unemployed) ]). 


    family(
person(james, gordon, date(23,aug,1953), works(GCPD, 17000)), 
person(kristen, gordon, date(22,may,1955), works(Hospital, 15000), 
[ person(penny, gordon, date(2,dec,1995), unemployed), 
    person(george, gordon, date(2,dec,1995), unemployed), 
    person(nick, gordon, date(15,sep,1993), unemployed) ]). 



    family(
person(bilbo, baggins, date(7,may,1980), works(farmer, 19200)), 
person(beladona, baggins, date(9,sep,1971), works(farmer, 18200)), 
[ person(frodo, baggins, date(15,jun,1995), unemployed), 
    person(sam, baggins, date(25,may,1993), unemployed) ], 
    person(mery, baggins, date(9,mar,1992), unemployed), 
    person(pippin, baggins, date(17,dec,1998), unemployed),). 



    family(
person(ragnar, lothbrok, date(7,may,1970), works(WarIN, 19500)), 
person(lagertha, lothbrok, date(9,may,1971), unemployed), 
[ person(rolo, lothbrok, date(5,may,1995), unemployed), 
    person(bjorn, lothbrok, date(5,may,1983), unemployed) ]). 




    husband(X) :- family(X, _, _). 
    wife(X) :- family(_, X, _). 
    child(X) :- family(_, _, Children), member(X, Children). 
    exists(Persons) :- husband(Persons); wife(Persons); 
            child(Persons). 
    dateofbirth(person(_, _, Date, _), Date). 

problème est quand je pose une question par exemple:

?- child(X), dateofbirth(X, date(_, _, 1995)). 

Je reçois comme résultat l'enfant de la dernière famille, pas tous les 4 d'entre eux.

X = person(rolo, lothbrok, date(5, may, 1995), unemployed) ; 
false. 

Une aide?

Répondre

0

Tout ce que vous avez à faire est de corriger certaines erreurs de syntaxe dans votre base de connaissances. Il vous manque la parenthèse de fermeture lorsque le deuxième parent a un emploi. En outre, vous devez utiliser la notation en minuscules pour les atomes tels que Hospital, GCPG et WarnIn.

family(
person(tom, fox, date(7,may,1960), works(bbc, 15200)), 
person(ann, fox, date(9,may,1961), unemployed), 
[ person(pat, fox, date(5,may,1983), unemployed), 
    person(jim, fox, date(5,may,1983), unemployed) ]). 

family(
person(chris, adler, date(1,jan,1965), works(rekit, 23000)), 
person(mary, adler, date(7,apr,1968), works(dia, 9500)), 
[ person(john, adler, date(19,apr,1995), unemployed), 
    person(randal, adler, date(22,nov,1992), unemployed) ]). 

family(
person(james, gordon, date(23,aug,1953), works(gcpd, 17000)), 
person(kristen, gordon, date(22,may,1955), works(hospital, 15000)), 
[ person(penny, gordon, date(2,dec,1995), unemployed), 
    person(george, gordon, date(2,dec,1995), unemployed), 
    person(nick, gordon, date(15,sep,1993), unemployed) ]). 

family(
person(bilbo, baggins, date(7,may,1980), works(farmer, 19200)), 
person(beladona, baggins, date(9,sep,1971), works(farmer, 18200)), 
[ person(frodo, baggins, date(15,jun,1995), unemployed), 
    person(sam, baggins, date(25,may,1993), unemployed) , 
    person(mery, baggins, date(9,mar,1992), unemployed), 
    person(pippin, baggins, date(17,dec,1998), unemployed)]). 

family(
person(ragnar, lothbrok, date(7,may,1970), works(warin, 19500)), 
person(lagertha, lothbrok, date(9,may,1971), unemployed), 
[ person(rolo, lothbrok, date(5,may,1995), unemployed), 
    person(bjorn, lothbrok, date(5,may,1983), unemployed) ]). 

husband(X) :- family(X, _, _). 
wife(X) :- family(_, X, _). 
child(X) :- family(_, _, Children), member(X, Children). 
exists(Persons) :- husband(Persons); wife(Persons); 
            child(Persons). 
dateofbirth(person(_, _, Date, _), Date). 

Test:

child(X), dateofbirth(X, date(_, _, 1995)). 

Résultat:

X = person(john, adler, date(19, apr, 1995), unemployed) 
X = person(penny, gordon, date(2, dec, 1995), unemployed) 
X = person(george, gordon, date(2, dec, 1995), unemployed) 
X = person(frodo, baggins, date(15, jun, 1995), unemployed) 
X = person(rolo, lothbrok, date(5, may, 1995), unemployed) 
false