====== Seznami ====== - Sintaksa podobna javanski ali pythonovski * prazen seznam: ''[]'' * seznam z elementi: ''[1,2,3]'' * seznam lahko vsebuje različne stvari: ''[a,b,1,2]'' * … tudi druge sezname: ''[a,1,[c,2]]'' * … in spremenljivke: ''[a,b,X,Y]'' - Interna predstavitev s strukturo ''.(H,T)'' * (SWI-Prolog ≥ 7 uporablja funktor ''[|]'' namesto ''.'') * povezan seznam (linked list), ne polje (array)! * primer: drevo za ''[a,b,c]'' * dostop le do prvega elementa, v splošnem O(n) - Prilagajanje * ''L = [a,b,c]'' * ''[X,Y,Z] = [a,b,c]'' * seznam lahko razbijemo na glavo in rep * ''List = [a,b,c], List = [H|T]'' * ''[H|T] = [a,b,c]'' * ''H = a, T = [b,c]'' * … lahko pa ga sestavimo iz glave in repa * ''H = a, T = [b,c], List = [H|T]'' * … praznega seznama ne moremo razbiti * ''[H|T] = []'' * glava ''H'' je prvi //element// seznama * glava je lahko tudi seznam, npr. ''[H|T] = [ [a,b], 1, 2, 3 ]'' * rep ''T'' je vedno //seznam//, lahko pa je prazen * z začetka seznama lahko vzamemo več elementov * ''[H1,H2|T] = [a,b]'' * sintaktični sladkorček za ''[H1|[H2|T]]'' - Naloge * ''insert/3'' * rešimo skupaj * ''memb/2'' * ''del/3'' * opozori na uporabo pravilnih imen zaradi testiranja, ker jih pol piše ''delete'' namesto ''del'' * ''dup/2'' * ''conc/3'' * ''last_elem/2'' * ''divide/3'' * ''permute/2'' * vrača (generira) vse permutacije; vrstni red ni pomemben