En av de enklaste och mest anvandbara strukturerna i prolog ar listor. En lista ar en sekvens av n antal av foremal t.ex. kalle, slalom, olle, tennis kan skrivas som [kalle ,slalom, olle, tennis] nar de representeras i en lista.
Detta sager att om X inte ar det forsta elementet i listan sa kan det vara
ett element i resten av listan och om det ar sant sa ar aven det
forsta pastaendet sant.
Sammanslagning av tva listor
For sammanslagningen (concatination) av
tva listor definieras relationen
conc(L1, L2, L3)
Dar L1 och L2 ar tvalistor och L3 ar sammanslagningen av dessa
conc([a, b], [c, d], [a, b, c, d])
blir sann
conc([a, b], [c, d], [a, b, a, c, d])
blir falsk
I definitionen pa conc finns det tva fall beroende pa det
forsta argumentet
Detta program kan nu anvandas for att sla samman listor och exempel
pa provkorning av programmet visas nedan
21 ?- conc([a, b, c], [1, 2, 3], L). L = [a, b, c, 1, 2, 3] Yes 22 ?- conc([a, [b, c], d], [a, [], b], L). L = [a, [b, c], d, a, [], b]
23 ?- conc(Before, [ onsdag | After], | [mandag, tisdag, onsdag, torsdag, fredag, lordag, sondag]). Before = [mandag, tisdag] After = [torsdag, fredag, lordag, sondag] ;
24 ?- conc(_, [Dagfore, fredag, Dagefter | _], | [mandag, tisdag, onsdag, torsdag, fredag, lordag, sondag]). Dagfore = torsdag Dagefter = lordag
Lagga till ett objekt i en lista
For att lagga till ett objekt i en lista ar det enklast att lagga
objektet i borjan pa listan sa att det blir det nya huvudet. Om X ar
det nya objektet och listan som X skall laggas in i ar L da blir den
resulterande listan.
<#137#>[X | L]
Om vi skall definiera en procedure som lagger objektet forst i listan
ser det ut pa detta vis:
add(X, L, [X | L]).
Vilket kan tolkas som
lagga till X till Y ger den nya listan [X |
L] med X som huvud.
Ta bort ett objekt i en lista
Nar man tar bort ett objekt fran en lista kan det programmeras som en
relation:
del(X, L, L1).
Kan lasas som
Ta bort X fran listan L vilket ger den nya listan
L1
delete relationen kan programmeras pa liknade satt som
medlemsrelationen vi har igen tva fall:
del(X, [X | Tail], Tail).
del(X, [Y | Tail], Y |Tail1]) :-
del(X, Tail, Tail1).
Liksom medlem kan inte del avgora om det ar ratt objekt som
den vill ta bort. Om det finns flera mojligheter av X kan
inte prolog avgora vilken som skall tas bort och det resulterar i
vilket som helst av objekten tas bort men bara ett den tar inte bort
alla forekomster av X.
Ett exempel pa detta ges i nedanstaende programkorning
2 ?- del(a, [a, b, a, a], L). L = [b, a, a] ; L = [a, b, a] ; L = [a, b, a] ; No 3 ?-
3 ?- del(a, L, [b, c, d]). L = [a, b, c, d] ; L = [b, a, c, d] ; L = [b, c, a, d] ; L = [b, c, d, a] ; No 4 ?-Detta som att placera in X vart som helst i listan kan aven skrivas som klausulen: