Prolog "sets"
Admin User, erstellt 06. Apr. 2025
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
runner_file(calculate, sets, 'XLOG 1.5 sets').
/* list_to_set(X, Y) */
runner_pred(list_to_set,2, calculate, sets, 'XLOG 1.5.1').
runner_case(list_to_set,2, calculate, sets, 'XLOG 1.5.1, XLOG 1') :-
list_to_set([c,a,b,a], X), X == [c,a,b].
runner_case(list_to_set,2, calculate, sets, 'XLOG 1.5.1, XLOG 2') :-
\+ list_to_set([c,a,b,a], [c,b,a]).
runner_case(list_to_set,2, calculate, sets, 'XLOG 1.5.1, XLOG 3') :-
\+ list_to_set([c|foo], _).
runner_case(list_to_set,2, calculate, sets, 'XLOG 1.5.1, XLOG 4') :-
list_to_set(X, Y), X == [], Y == [].
/*******************************************************************/
/* lists.p Set Operations */
/*******************************************************************/
/* subtract(X, Y, Z) */
runner_pred(subtract,3, calculate, sets, 'XLOG 1.5.2').
runner_case(subtract,3, calculate, sets, 'XLOG 1.5.2, XLOG 1') :-
subtract([1,2,3], [2,3,4], X),
X == [1].
runner_case(subtract,3, calculate, sets, 'XLOG 1.5.2, XLOG 2') :-
subtract([1,3], [2,4], X),
X == [1, 3].
runner_case(subtract,3, calculate, sets, 'XLOG 1.5.2, XLOG 3') :-
\+ subtract([1|foo], [2,4], _).
/* intersection(X, Y, Z) */
runner_pred(intersection,3, calculate, sets, 'XLOG 1.5.3').
runner_case(intersection,3, calculate, sets, 'XLOG 1.5.3, XLOG 1') :-
intersection([1,2,3], [2,3,4], X),
X == [2, 3].
runner_case(intersection,3, calculate, sets, 'XLOG 1.5.3, XLOG 2') :-
intersection([1,3], [2,4], X),
X == [].
runner_case(intersection,3, calculate, sets, 'XLOG 1.5.3, XLOG 3') :-
intersection([1|X], [2,4], Y), X == [], Y == [].
/* union(X, Y, Z) */
runner_pred(union,3, calculate, sets, 'XLOG 1.5.4').
runner_case(union,3, calculate, sets, 'XLOG 1.5.4, XLOG 1') :-
union([2,3,4], [1,2,3], X),
X == [2, 3, 4, 1].
runner_case(union,3, calculate, sets, 'XLOG 1.5.4, XLOG 2') :-
union([1,3], [2,4], X),
X == [1, 3, 2, 4].
runner_case(union,3, calculate, sets, 'XLOG 1.5.4, XLOG 3') :-
\+ union([1|foo], [2,4], _).
/* symdiff(X, Y, Z) */
runner_pred(symdiff,3, calculate, sets, 'XLOG 1.5.5').
runner_case(symdiff,3, calculate, sets, 'XLOG 1.5.5, XLOG 1') :-
symdiff([1,2,3], [2,3,4], X),
X == [1, 4].
runner_case(symdiff,3, calculate, sets, 'XLOG 1.5.5, XLOG 2') :-
symdiff([1,3], [2,4], X),
X == [1, 3, 2, 4].
runner_case(symdiff,3, calculate, sets, 'XLOG 1.5.5, XLOG 3') :-
symdiff([1,3], [2|X], Y), X == [1, 3], Y == [2].
/*******************************************************************/
/* lists.p Set Tests */
/*******************************************************************/
/* subset(X, Y) */
runner_pred(subset,2, calculate, sets, 'XLOG 1.5.6').
runner_case(subset,2, calculate, sets, 'XLOG 1.5.6, XLOG 1') :-
subset([2,3], [1,2,3,4]).
runner_case(subset,2, calculate, sets, 'XLOG 1.5.6, XLOG 2') :-
\+ subset([1,3], [2,4]).
runner_case(subset,2, calculate, sets, 'XLOG 1.5.6, XLOG 3') :-
\+ subset([2|foo], [1,2,3,4]).
/* disjoint(X, Y) */
runner_pred(disjoint,2, calculate, sets, 'XLOG 1.5.7').
runner_case(disjoint,2, calculate, sets, 'XLOG 1.5.7, XLOG 1') :-
\+ disjoint([2,3], [1,2,3,4]).
runner_case(disjoint,2, calculate, sets, 'XLOG 1.5.7, XLOG 2') :-
disjoint([1,3], [2,4]).
runner_case(disjoint,2, calculate, sets, 'XLOG 1.5.7, XLOG 3') :-
disjoint([1|X], [2,4]), X ==[].
/* equal(X, Y) */
runner_pred(equal,2, calculate, sets, 'XLOG 1.5.8').
runner_case(equal,2, calculate, sets, 'XLOG 1.5.8, XLOG 1') :-
equal([2,3], [3,2,3]).
runner_case(equal,2, calculate, sets, 'XLOG 1.5.8, XLOG 2') :-
\+ equal([1,3], [2,4]).
runner_case(equal,2, calculate, sets, 'XLOG 1.5.8, XLOG 3') :-
\+ equal([2,3], [3,2|foo]).
runner_case(equal,2, calculate, sets, 'XLOG 1.5.8, XLOG 4') :-
equal([3,2|X], [2,3]), X == [].