Ostatni element listy w prologu

0

Ta funkcja: ostatni1(L,O) :- [X|Y]=L, O=Y. działa i zwraca ogon listy, czyli listę bez pierwszego elementu. Mam za zadanie zwrócić ostatni element listy pisząc własną interpretacje. Mój pomysł: biorę listę, zwracam ogon(pozostałe elementy), wywołuje rekurencyjnie funkcje do momentu gdy uzyskam listę 1 elementową czyli tak naprawdę ostatni element listy. Na początek chciałam rozszerzyć swój algorytm o sprawdzanie czy lista ma więcej niż 1 element. ostatni(L,O) :- T = length(L,T), T>1 , [X|Y]=L, O=Y. program nie działa. Za każdym razem chce obliczać długość więc nie muszę jej przechowywać. Jak zmodyfikować kod aby zwracał ogon listy pod warunkiem że długość tej listy będzie większa od 1?

Zmienną X mogę zastąpić w kodzie zmienną anonimową czyli "_".

Tak muszę potem uwzględnić sytuacje gdy liczba elementów równa się jeden i zwrócić listę po prostu.

1

Najprościej jest to rozwiązać tak:

last([X], X).
last([_|XS], Y) :- last(XS, Y).

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