Zagadka logiczna - Prolog

0

Cześć,
spotkałem się ostatnio z takim zadaniem:
W ogrodzie siedziały 4 pary narzeczonych i zajadały śliwki Andzia zjadła 2 śliwki, Beata 3, Celina 4, Danusia 5. Ich narzeczeni również nie próżnowali.
Andrzej zjadł tyle co jego narzeczona, Bogumił dwa razy tyle Cezary trzy razy tyle, Damian cztery razy tyle. Wszyscy razem zjedli 44 śliwki Jakie są pary narzeczonych?

Stworzyłem do tego następujący kod:

pary(X1,X2,X3,X4) :-
                                       L=[1,2,3,4],
                                       A = 2,
                                       B = 3,
                                       C = 4,
                                       D = 5,
                                       select(X1,L,L1),
                                       select(X2,L1,L2),
                                       select(X3,L2,[X4]),
                                       A*X1+B*X2+C*X3+D*X4 =:= 30.

Zapytanie daje następujący wynik:

?- pary(Andzia,Beata,Celina,Danusia).

Andzia = 4,
Beata = 3,
Celina = 2,
Danusia = 1 

Kod działa poprawnie, ponieważ pokazuje, która dziewczyna jest z chłopakiem, który zjadł daną krotność jej śliwek. Moje pytanie jest następujące: W jaki sposób zmienić kod programu, aby w zapytaniu pojawiały się imiona chłopaków zamiast liczb?

0

http://www.swi-prolog.org/pldoc/man Link chyba nieprawidłowo zadziałał.

http://www.swi-prolog.org/pldoc/man?predicate=get_attrs/2
http://www.swi-prolog.org/pldoc/man?section=predsummary
http://www.swi-prolog.org/pldoc/man?predicate=get_string_code/3
http://www.swi-prolog.org/pldoc/doc_for?object=ifprolog%3Aget_global/2

Poszukaj, może to być coś z "get" albo po prostu trzeba będzie jakieś nawiasy dodać do wyrażenia. Napisz w polu wyszukiwania (search), w dokumentacji coś takiego jak wspomniane "get" i odszukaj to, co Cię interesuje.

0

Niestety, ale chyba nie pomoże mi to na tym etapie.

0

Może tak?

chlopiec("Andrzej",1).
chlopiec("Bogumił",2).
chlopiec("Cezary",3).
chlopiec("Damian",4).
dziewczyna("Andzia",1).
dziewczyna("Beata",2).
dziewczyna("Celina",3).
dziewczyna("Danusia",4).
pary :-
L=[1,2,3,4],
A = 2,
B = 3,
C = 4,
D = 5,

% select(X1,L,L1),
% select(X2,L1,L2),
% select(X3,L2,[X4]),
%zamiast tego może permutacja ?

permutation(L,[X1,X2,X3,X4]),
A*X1+B*X2+C*X3+D*X4 =:= 30,
chlopiec(Y1,X1),
chlopiec(Y2,X2),
chlopiec(Y3,X3),
chlopiec(Y4,X4),
dziewczyna(Z1,1),
dziewczyna(Z2,2),
dziewczyna(Z3,3),
dziewczyna(Z4,4),
writeln("Rozwiązanie:"),
writeln(Z1 > Y1),
writeln(Z2 > Y2),
writeln(Z3 > Y3),
writeln(Z4 > Y4),nl,fail.
pary :- writeln("To wszystkie rozwiązania").

i uruchomienie bez argumentów
?- pary.

1 użytkowników online, w tym zalogowanych: 0, gości: 1