KI bei Mindestgehältern 2: Generator von Versen über Prolog

Das Bild zeigt einen von meinem Programm erzeugten Quatrain.
"" , : , , . "" , , , . , , . : " N ", " ", " " .. , . Prolog — , .
Prolog, .
10
. :
, 9
, , 8
, 9
. 8
, 9
, , 8
, 9
. 8
, 9
, 8
, — 9
. 8
: , 9
, 8
, 9
, 8
, , . , : _'_'_'_'_ ( , — ). . , . , , . . , . , .
. , ( ) ( , ).
-. . , . , , :
,
.
:
- . .
- , .
- . .
- .
- .
- !
:
, 7
. 5
, , 7
— . 5
, . "", .
Prolog
, :
- , .. .
- , .
- .
"" , .. , , , ( ).
: , . - . , , Prolog , .. .
Prolog . , — , .. Prolog , . LISP. Prolog .
Prolog , , . () . , , :
(). () :- ().
Prolog (), (), (). , . , . . Prolog , . , — . " ". :-
.
Prolog ( SWI-Prolog), ?-
. , . socrates.pl [socrates].
,
:
?- (). true.
. , :
?- (). = .
Prolog "". .. (closed-world assumption) — , :
?- (). false.
, , Prolog false.
", ?" — . , . . fib(n, f_n)
,
-
:
fib(0, 1). fib(1, 1). fib(N, F) :- N #> 1, M #= N - 1, K #= M - 1, F #= G + P, fib(M, G), fib(K, P).
, 1. , : " fib(N, F)
, N
, M
N - 1
, K
M - 1
, F
G
P
, fib(M, G)
fib(K, P)
". "". #>
#=
, CLPFD, SWI-Prolog. "" =
, >
.. , REPL ?- use_module(library(clpfd)).
swipl, ?- fib(10, X).
X = 89
. X
, . ';', false
, , X
. : ?- fib(X, 13).
X = 6.
. !
Prolog. ( ) (). : = [ | ]
. , = [1, 2, 3, 4]
, = 1
, = [2, 3, 4]
. . freq(E, L, F)
E
L
F
:
freq(_, [], 0). freq(Element, [Head|Tail], F) :- Head #= Element, F #= P + 1, freq(Element, Tail, P), !. freq(Element, [Head|Tail], F) :- Head #\= Element, freq(Element, Tail, F), !.
: . " " "_". "" , . — . . freq
. ?- freq([1, 2, 2, 3], 2, X)
,
:
X #= X1, Tail = [2, 2, 3] X1 #= X2 + 1, Tail = [2, 3] X3 #= X4 + 1, Tail = [3] X5 #= X6, Tail = [] : freq(_, [], 0), X6 #= 0.
X #= 2
.
. .. "cut operator", . " , freq". -
.
Prolog
Prolog . , , . 3 3. , , , . :
A|B|C 2|7|6 -|-|- -|-|- D|E|F = 9|5|1 -|-|- -|-|- G|H|I 4|3|8
?
- 33 9 .
- .
- .
- 7 , "" .
CLPFD :
magic([A, B, C, D, E, F, G, H, I]) :- Vars = [A, B, C, D, E, F, G, H, I], Vars ins 1..100, all_different(Vars), A + D + G #= B + E + H, B + E + H #= C + F + I, C + F + I #= A + B + C, A + B + C #= D + E + F, D + E + F #= G + H + I, G + H + I #= A + E + I, A + E + I #= C + E + G, label(Vars).
magic
9 [1, 100] . label
. ?- magic(S).
33.
: . . :
- , .. .
- , .
- .
, — . . , , , , . , . :
: : , : : ,
, .
? — :
(, 1). (, 1). (, 3). (, 1). (, 1). (, 1). (, 1). (, 2). (, 2). (, 1). (, 1). (, 3).
. "", , "" . .
:
([, , , ]) :- (, _), (, _), (, _), (, _).
. ?- ().
. ? , ( — , — , — ). — , . :
(, ). (, ). (, ). (, ). (, ).
. , . , " — ", " — " , (, ) — , . , :
- . . .
:
_(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ). _(, ).
"__(1, 2)", 1 2 :
__([], []). __([1|1], [2|2]) :- 1 = 2, __(1, 2). __([1|1], [2|2]) :- _(1, 2), __(1, 2).
: .
, "(1, 2)" :
(1, 2) :- (1, 1), (2, 2), _(1, 1, 1), _(2, 2, 2), atom_chars(1, 1), atom_chars(2, 2), length(1, 1), length(2, 2), 1 - 1 #= 2 - 2, % slice(1, 1, 1, 1), slice(2, 2, 2, 2), __(1, 2), 1 \= 2.
atom_chars
, slice
. : C1 \= C2
, ?- (1, 2).
: . , "" "", "" , "" . "".
, " " "", .. . "".
. . ? , "", "" .
"", :
([1, 1, 1, 1], [2, 2, 2], [3, 3, 3, 3], [4, 4, 4], 1, 2, 3, 4) :- (1, _), (1, _), (1, _), (1, _), _([1, 1, 1, 1], 1), (2, _), 1 \= 2, (2, _), 1 \= 2, (2, _), 1 \= 2, _([2, 2, 2], 2), (3, _), 1 \= 3, (3, _), 1 \= 3, 2 \= 3, (3, _), 2 \= 3, 1 \= 3, (3, _), 2 \= 3, 1 \= 3, _([3, 3, 3, 3], 3), (1, 3), (4, _), 1 \= 4, 3 \= 4, 2 \= 4, (4, _), 1 \= 4, 3 \= 4, 2 \= 4, (4, _), 1 \= 4, 3 \= 4, 2 \= 4, _([4, 4, 4], 4), (2, 4). () :- (, , , , , _, , _), = [, , , ].
( , , ) X \= Y
.
, ?- ().
?
Es ist klar, dass alles, was beschrieben wird, nur ein Proof of Concept ist. Sie können dieses Thema weiterentwickeln. Fügen Sie dem Wörterbuch beispielsweise weitere Wörter hinzu, und erweitern Sie die Grammatik um verschiedene Zeitformen und Wortarten. Sie können auch neue Gedichtmuster definieren, die sich von den Klassikern unterscheiden, und tatsächlich ist das Feld für Experimente hier sehr reichhaltig.
Ich hoffe, Ihnen hat der Artikel gefallen und Sie haben etwas Neues gelernt. Link zum Projekt-Repository: Prolog-Poesie . Es gibt auch eine vollständige Startanweisung.