====== 5.10.2020 ======

Prolog installieren, z.B. SWI-Prolog oder GNU-Prolog
https://www.swi-prolog.org/

Terme:
  Zahlen           2, -3, 3.4, 1.5e-3
  Prolog-Atome     a, ab_3, 'abc, deD_-j'
  Variablen        A, X, Ya_37
  zusammengesezte Terme (Strukturen)
                   f(g(X,3),a), 2+3, [a,b,c]

?- setof(X, between(1,5,X), Zahlenliste).
Zahlenliste = [1, 2, 3, 4, 5].

?- setof(X, between(1,10,X), Zahlenliste), write(Zahlenliste).
[1,2,3,4,5,6,7,8,9,10]
Zahlenliste = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

?- findall(X, between(1,10,X), Zahlenliste), write(Zahlenliste).
[1,2,3,4,5,6,7,8,9,10]
Zahlenliste = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

?- help(between).


< > =< >= =:= =\= is





************************************************************
eder@t06:~$ swipl
?- between(1,5,X).
X = 1 .

?- between(1,5,X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5.

?- member(X,[a,b,c]).
X = a ;
X = b ;
X = c.

?- member(X,[a,b,c]), member(X,[b,c,d]).
X = b ;
X = c ;
false.

?- member(X,[a,b,c]); member(X,[b,c,d]).
X = a ;
X = b ;
X = c ;
X = b ;
X = c ;
X = d.

?- findall(X, member(X,[a,b,c]), L).
L = [a, b, c].

?- findall(X, (member(X,[a,b,c]), member(X,[b,c,d])), L).
L = [b, c].

?- atom('abc, deD_-j').
true.

?- findall(X, (member(X,[a,b,c]); member(X,[b,c,d])), L).
L = [a, b, c, b, c, d].

?- findall(X, (member(X,[a,b,c]); member(X,[b,c,d])), L), sort(L,Vereinigung).
L = [a, b, c, b, c, d],
Vereinigung = [a, b, c, d].

?- setof(X, (member(X,[a,b,c]); member(X,[b,c,d])), L).
L = [a, b, c, d].

?- setof(X, between(1,5,X), Zahlenliste).
Zahlenliste = [1, 2, 3, 4, 5].

?- fail.
false.

?- findall(X,fail,L).
L = [].

?- findall(X,fail,L), sort(L,S).
L = S, S = [].

?- setof(X,fail,S).
false.

?- findall(f(X,Y), (member(X,[a,b]), between(-3,-2,Y)), L).
L = [f(a, -3), f(a, -2), f(b, -3), f(b, -2)].

?- member(X,[a,b]), between(-3,-2,Y).
X = a,
Y = -3 ;
X = a,
Y = -2 ;
X = b,
Y = -3 ;
X = b,
Y = -2.

?- [buchst_zahl].
true.

?- listing.

zahl(-3).
zahl(-2).

buchstabe(a).
buchstabe(b).

...

?- listing(buchstabe).
buchstabe(a).
buchstabe(b).

true.

?- listing(zahl).
zahl(-3).
zahl(-2).

true.

?- buchstabe(X), zahl(Y).
X = a,
Y = -3 ;
X = a,
Y = -2 ;
X = b,
Y = -3 ;
X = b,
Y = -2.

?- findall(f(X,Y), (buchstabe(X), zahl(Y)), L).
L = [f(a, -3), f(a, -2), f(b, -3), f(b, -2)].

?- X = 2*3.
X = 2*3.

?- 2*3 = 3*2.
false.

?- 2*3 < 7.
true.

?- 2*3 =:= 3*2.
true.

?- X is sin(pi/2).
X = 1.0.

?- 1 is sin(pi/2).
false.

?- 1 =:= sin(pi/2).
true.

?- 1.0 is sin(pi/2).
true.

?- findall(Q, (between(1,5,N), Q is N**2), Quadratzahlen).
Quadratzahlen = [1, 4, 9, 16, 25].

************************************************************
eder@t06:~$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.2)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- help(between).
true.

?- help(',').
true.

?- help(';').
true.

?- help(sort).
true.

?- help(fail).
true.

?- help(=\=).
true.

?- help(is).
true.

?- 

beamer.pdf bis 15/159


, und
; oder
:- wenn


************************************************************
eder@t06:~$ cd lehre/fgm
eder@t06:~/lehre/fgm$ ls
buchst_zahl.pl  fgm2019w  FGM.png  notizen  notizen~  teilnehmer
eder@t06:~/lehre/fgm$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.2)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- edit(file('xxxxxxxxxxxx1.pl')).
true.

?- % /home/scicomp/eder/lehre/fgm/xxxxxxxxxxxx1 compiled 0.00 sec, 0 clauses
?- 
|    p(X).
X = a ;
X = b ;
X = f(a) ;
X = f(b) ;
X = f(f(a)) ;
X = f(f(b)) ;
X = f(f(f(a))) ;
X = f(f(f(b))) ;
X = f(f(f(f(a)))) ;
X = f(f(f(f(b)))) ;
X = f(f(f(f(f(a))))) ;
X = f(f(f(f(f(b))))) ;
X = f(f(f(f(f(f(a)))))) ;
X = f(f(f(f(f(f(b)))))) ;
X = f(f(f(f(f(f(f(a))))))) ;
X = f(f(f(f(f(f(f(b))))))) ;
X = f(f(f(f(f(f(f(f(a)))))))) .

Nach Änderung des Programms zu xxxxxxxxxxxx2.pl und neuem Laden:
?- p(X).
X = a ;
X = b ;
X = f(a, a) ;
X = f(a, b) ;
X = f(a, f(a, a)) ;
X = f(a, f(a, b)) ;
X = f(a, f(a, f(a, a))) ;
X = f(a, f(a, f(a, b))) ;
X = f(a, f(a, f(a, f(a, a)))) ;
X = f(a, f(a, f(a, f(a, b)))) ;
X = f(a, f(a, f(a, f(a, f(a, a))))) ;
X = f(a, f(a, f(a, f(a, f(a, b))))) ;
X = f(a, f(a, f(a, f(a, f(a, f(a, a)))))) .

?- p(f(b,a)).
true.

?- ^D
% halt
eder@t06:~/lehre/fgm$ swipl -f addkomm.pl 
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.2)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- ^D
% halt
eder@t06:~/lehre/fgm$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.2)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- [addkomm].
true.

?- addkomm_Gegenbeispiel(X,Y).
false.

?- ^D
% halt
eder@t06:~/lehre/fgm$ swipl
...
?- [subkomm].
true.

?- subkomm_Gegenbeispiel(X,Y).
X = 1,
Y = 2 ;
X = 1,
Y = 3 ;
X = 1,
Y = 4 ;
X = 1,
Y = 5 ;
X = 1,
Y = 6 ;
X = 1,
Y = 7 .

?- [subkomm].
true.

?- subkomm_Gegenbeispiel(Gegenbeispiel).
Gegenbeispiel =  (1-2=\=2-1) ;
Gegenbeispiel =  (1-3=\=3-1) ;
Gegenbeispiel =  (1-4=\=4-1) ;
Gegenbeispiel =  (1-5=\=5-1) ;
Gegenbeispiel =  (1-6=\=6-1) ;
Gegenbeispiel =  (1-7=\=7-1) ;
Gegenbeispiel =  (1-8=\=8-1) ;
Gegenbeispiel =  (1-9=\=9-1) ;
Gegenbeispiel =  (1-10=\=10-1) ;
Gegenbeispiel =  (2-1=\=1-2) ;
Gegenbeispiel =  (2-3=\=3-2) ;
Gegenbeispiel =  (2-4=\=4-2) ;
Gegenbeispiel =  (2-5=\=5-2) ;
Gegenbeispiel =  (2-6=\=6-2) ;
Gegenbeispiel =  (2-7=\=7-2) ;
Gegenbeispiel =  (2-8=\=8-2) ;
Gegenbeispiel =  (2-9=\=9-2) ;
Gegenbeispiel =  (2-10=\=10-2) ;
Gegenbeispiel =  (3-1=\=1-3) ;
Gegenbeispiel =  (3-2=\=2-3) ;
Gegenbeispiel =  (3-4=\=4-3) .

?- [wahrheitswertfunktionen].
true.

?- nicht(A,X).
A = w,
X = f ;
A = f,
X = w.

?- nicht(A,X), write(A), write(X).
wf
A = w,
X = f ;
fw
A = f,
X = w.

?- nicht(A,X), write(A), write(X), fail.
wffw
false.

?- nicht(A,X), write(A), write(X), nl, fail.
wf
fw
false.

?- forall(nicht(A,X),   (write(A), write(X), nl) ).
wf
fw
true.

?- [wahrheitswertfunktionen].
true.

?- forall(und(A,B,X), (write(A), write(B), write(' '), write(X), nl)).
ww w
wf f
fw f
ff f
true.

?- und(A,B,X), und(B,A,Y), nicht(X,Y).
false.

?- und(A,B,X), und(B,A,Y).
A = B, B = X, X = Y, Y = w ;
A = w,
B = X, X = Y, Y = f ;
A = X, X = Y, Y = f,
B = w ;
A = B, B = X, X = Y, Y = f.

?- [wahrheitswertfunktionen].
true.

?- impl(A,B,f).
Correct to: "imp(A,B,f)"? 
Please answer 'y' or 'n'? yes
A = w,
B = f.

?- imp(A,B,f).
A = w,
B = f.

?- imp(A,B,w).
A = B, B = w ;
A = f,
B = w ;
A = B, B = f.

?- forall((und(A,B,X), und(B,A,Y)), (write(A),write(B),write(X),write(Y),nl)). 

wwww
wfff
fwff
ffff
true.

?- forall((und(A,B,X), und(B,A,Y)),format('~w und ~w = ~w.  ~w und ~w =).
|    
|    ^C
^DAction (h for help) ? Unknown option (h for help)
Action (h for help) ? EOF: exit (status 4)
eder@t06:~/lehre/fgm$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.2)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- [wahrheitswertfunktionen].
true.

?- forall((und(A,B,X), und(B,A,Y)),
|    format('~w und ~w = ~w.  ~w und ~w = ~w.~n', [A,B,X,B,A,Y])).
w und w = w.  w und w = w.
w und f = f.  f und w = f.
f und w = f.  w und f = f.
f und f = f.  f und f = f.
true.
