Dwa ostatnie elementy listy Prolog

Dwa ostatnie elementy listy Prolog
S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Napisać predykat **max(X,L) **, który jako X zwraca wartość elementu większego z dwóch ostatnich elementów listy L.
Np. ?- max(X,[4,38,10,22]).
X = 22

Wiem, że ostatni element wyciąga się w następujący sposób:

ostatni(X,[X]).
ostatni(X,[_|O]):-ostatni(X,O).

Natomiast z dwoma elementami mam już problem. Jaki powinien być warunek zakończenia rekurencji?
Z większym elementem sobie raczej poradzę, ale nie wiem też jak to wszystko połączyć w jeden predykat.

szatkus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 227
4

Wystarczy trochę rozwinąć ten kod, który masz.

Kopiuj
max(X,[X, Y]) :- X >= Y, !.
max(Y,[X, Y]) :- X < Y, !.
max(X,[_|O]) :- max(X, O).

Dodałem odcięcia na końcu, bo próbuje przeszukiwać dalej, mimo, że to bez sensu

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.