1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
% Statische Überprüfung auf self_dual von Funktion %
or(A,B) :- A; B.
check(A,B) :- or(not(A),B),or(A,not(B)).
% Dieses Prädikat setzt alle Kombinationen der Funktionswerte der Funktion in check ein,
% wenn alle Überprüfungen true ergeben, dann ist das übergebene Prädikat self_dual.
list([]).
listensplit([H|T], H, T).
self_dual(ZZ) :-
%arity(ZZ,X),
list([[1,1],[1,0],[0,1],[0,0]]),
listensplit([[1,1],[1,0],[0,1],[0,0]],Head,Rest),
listensplit(Head,First,Second),
check(f(First,Second,0),f(not(First),not(Second),0)),
listensplit(Rest,Head,Rest),
listensplit(Head,First,Second),
check(f(First,Second,0),f(not(First),not(Second),0)),
listensplit(Rest,Head,Rest),
listensplit(Head,First,Second),
check(f(First,Second,0),f(not(First),not(Second),0)),
listensplit(Rest,Head,Rest),
listensplit(Head,First,Second),
check(f(First,Second,0),f(not(First),not(Second),0)).
|