From 7e9bf70d73fa203443ee378fc7f38aca95178054 Mon Sep 17 00:00:00 2001 From: teridax Date: Mon, 5 Jun 2023 19:01:54 +0200 Subject: [PATCH] added lists.pro --- Lists.pro | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 8 ++++- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 Lists.pro 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:/).