added lists.pro

This commit is contained in:
Sven Vogel 2023-06-05 19:01:54 +02:00
parent 26ef9a7766
commit 7e9bf70d73
2 changed files with 100 additions and 1 deletions

93
Lists.pro Normal file
View File

@ -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.

View File

@ -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.
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:/).