diff --git a/Lists.pro b/Lists.pro new file mode 100644 index 0000000..7686d8d --- /dev/null +++ b/Lists.pro @@ -0,0 +1,93 @@ + +% iterate over list in sucessive order +% prints each element +% +% example: iter_nth([1,2,3,4,5,6,7,8,9]) +% output: [1,2,3,4,5,6,7,8,9] +iter([]). +iter([H|T]):-writeln(H), iter(T). + +% iterate over list in reverse order +% prints each element +% +% example: iter_nth([1,2,3,4,5,6,7,8,9]) +% output: [9,8,7,6,5,4,3,2,1] +iter_rev([A]):-writeln(A). +iter_rev([H|T]):-iter_rev(T), writeln(H). + +% prints every 2nd element from the supplied list +iter_every_2nd([]). +iter_every_2nd([_|[H2|T]]):-writeln(H2), iter_every_2nd(T). + +% iterate over every nth element in the list +% +% example: iter_nth([1,2,3,4,5,6,7,8,9], 3) +% output: [3, 6, 9] +iter_nth([], _, _). +iter_nth([H|T], E, 0):- + R is E - 1, + iter_nth(T, E, R), + writeln(H). + +iter_nth([_|T], E, L):- + R is L - 1, + iter_nth(T, E, R). + +iter_nth(L, N):- + R is N - 1, + iter_nth(L, N, R). + +% iterate over all elements with an even index +iter_even(L):-iter_nth(L, 2). + +% iterate over all elements with an odd index +iter_odd(L):-iter_nth(L, 2, 0). + +% counts the amount of items in the supplied list +% +% example: len([1,2,3,4,5,6], X) +% output: X = 6 +len([], L):-L is 0. +len([_|T], L):- + len(T, Tmp), + L is Tmp + 1. + +% count the amounts an element `E` is present in the supplied list +% +% example: count([a,b,c,a], a, X) +% output: X = 2 +count([], _, L):-L is 0. +count([H|T], E, L):- + H == E, + count(T, E, R), + L is R + 1. +count([_|T], E, L):- + count(T, E, R), + L is R. + +% return the nth element of the supplied list. +% indexing starts with 0 +% +% example: nth([a,b,c,d,e], 3, X) +% output: X = d +nth([],_). +nth([H|_], 0, O):-O is H. +nth([_|T], C, O):- + C1 is C - 1, + nth(T,C1, K), + O is K. + +% return the index of the first occurance of the element +% in a list +% indexing starts with 0 +% +% example: indexof([0,1,3,4,5,6,7,8,9], 3, X) +% output: X = 2 +indexof([],_,C):-C is 0. +indexof([H|_],E,C):- + H == E, + C is 0. +indexof([_|T],E,C):- + indexof(T,E,R), + C is R + 1. + diff --git a/README.md b/README.md index 8c528c3..eeb4092 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # Prolog -Code written for the class "Grundlagen und Logik". The repository contais source written in the Prolog programming language compatible with the SWISH online environment. \ No newline at end of file +Code written for the class "Grundlagen und Logik". The repository contais source written in the Prolog programming language compatible with the SWISH online environment. + +Note that the offical file extension for prolog is ".pl" which conflicts with perls ".pl" extension. Due to this all prolog source files in this repository will have the ".pro" file extension. + +## Run + +You can run the code by visiting [SWISH Prolog](https://swish.swi-prolog.org/https:/).