Witam serdecznie.
Właśnie zaczynam swoją przygodę z prologiem, co prawda nieco wymuszoną przez uczelnię ale nvm.
Rozwiązując zadania napotkałem na kilka problemów.
Zadanie 1.
Znaleźć najczęściej powtarzający się element i go wypisać.
Przykład:
maxlist([a,b,a,a,b,a,d,a,c],X).
X=a.
Sądzę, że najpierw trzeba posortować listę wejściową, ale chyba typu char się nie da, więc należy za pomocą name zamienić litery na liczby, posortować, zamienić ponownie na litery. W ten sposób z listy wejściowej otrzymujemy L=[a,a,a,a,a,b,b,c,d]. Teraz w jakiś sposób należy obliczyć ilość wystąpień danego elementu i znaleźć element najczęściej występujący i go wypisać. Niestety nie wiem jak to zrobić, nie wiem nawet czy sortowanie jest konieczne. Dlatego proszę o pomoc.
Zadanie 2.
Znaleźć największy przedział na liście przedziałów, podzielić go na pół, modyfikując w ten sposób listę wejściową. Zakładamy, że pierwsza współrzędna jest zawsze mniejsza od drugiej.
Przykład:
cord([[-4,2],[-2,14],[-1,11]], X).
X = [[-4,2],[-2,8],[8,14],[-1,11]],X).
Jak widać największy przedział to [-2,14], jest on więc dzielony na pół i otrzymujemy z niego 2 przedziały: [-2,8] i [8,14].
Tego zadania nawet nie potrafię ruszyć. Nie wiem co należy robić.
Zadanie 3.
Z listy słów należy utworzyć podlisty zawierające litery pierwszych i ostatnich liter danego wyrazu.
Przykład:
polacz([pies,kot,krowa],X).
X = [[p,s],[k,t],[k,a].
Edit: To już zrobiłem oto kod (może się komuś przyda):
odwroc([X],[X]).
odwroc[H|T],X) :- odwroc(T,Y), append(Y,[H],X).
polacz([H|T], [G|O]) :- name(H,L1), L1=[H1|T1], name(P,[H1]), odwroc(L1,L2), L2=[H2|T2], name(L,[H2]), G=[P,L], polacz(T,O).