Zagadka logiczna - Prolog

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
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:

Kopiuj
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:

Kopiuj
?- 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?

Neutral
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polanów
  • Postów: 151
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.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

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

AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Może tak?

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.