Prośba o wytłumaczenie zadania Prolog

0

W ogrodzie siedziały 4 pary narzeczonych i zajadały śliwki: Andzia - 2, Beata - 3, Celina - 4, Danusia - 5
ich narzeczeni nie próżnowali:
Andrzej zjadł tyle co jego narzeczona
Bogumił 2 razy tyle, co jego narzeczona
Cezary 3 razy tyle, co jego narzeczona
Damian 4 razy tyle, co jego narzeczona

Wszyscy razem zjedli 44 śliwki.

Mam też rozwiązanie tego zadania, którego jednak nie rozumiem:

wynik1(Y1,Y2,Y3,Y4) :-
  C=[1,2,3,4],                                    % lista krotności - zrozumiałe
  X1=2, X2=3, X3=4, X4=5,               % dziewczyny na sztywno - zrozumiałe
  select(Y1,C,C1),
  select(Y2,C1,C2),
  select(Y3,C2,[Y4]),
  44 is X1+X1*Y1 + X2+X2*Y2 + X3+X3*Y3 + X4+X4*Y4,!.  %  - to jest dla mnie zrozumiale, poza "!"

Czy ktoś mógłby mi wyjaśnić, łopatologicznie:) rozwiązanie tego zadania? Nie rozumiem linii z selectami (pomimo, że wiem co robi select). Bardzo proszę o cierpliwe podejście do tematu:)

0

Przepiszmy to trochę bardziej czytelnie:

wynik1(NarzeczonyAndzi, NarzeczonyBeaty, NarzeczonyCeliny, NarzecznyDanusi) :-
  C=[1,2,3,4],                                          % lista krotności - zrozumiałe
  Andzia=2, Beata=3, Celina=4, Danusia=5,               % dziewczyny na sztywno - zrozumiałe
  select(NarzeczonyAndzi,   C, C1),
  select(NarzeczonyBeaty,  C1, C2),
  select(NarzeczonyCeliny, C2, [NarzecznyDanusi]),
  44 is Andzia*(1 + NarzeczonyAndzi) + Beata*(1 + NarzeczonyBeaty) + Celina*(1 + NarzeczonyCeliny) + Danusia*(1 + NarzecznyDanusi),!.  %  - to jest dla mnie zrozumiale, poza "!"

Teraz jest jaśniejsze? select/3 sprawdza, czy lista w trzecim argumencie jest równa liście w drugim argumencie wyłączajac element z pierwszego argumentu.

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