AI dengan gaji minimum 2: Generator ayat di Prolog

AI dengan gaji minimum 2: Generator ayat di Prolog



Gambar peringatan







Gambar menunjukkan syair yang dihasilkan oleh program saya.







"" , : , , . "" , , , . , , . : " N ", " ", " " .. , . Prolog — , .







Prolog, .







10



. :







, 9

, , 8

, 9

. 8







, 9

, , 8

, 9

. 8







, 9

, 8

, — 9

. 8







: , 9

, 8

, 9

, 8







, , . , : _'_'_'_'_ ( , — ). . , . , , . . , . , .







. , ( ) ( , ).







-. . , . , , :







,

.







:







  1. . .
  2. , .
  3. . .
  4. .
  5. .
  6. !


:







, 7

. 5

, , 7

. 5







, . "", .







Prolog



, :







  1. , .. .
  2. , .
  3. .


"" , .. , , , ( ).







: , . - . , , 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)



, n - fn :







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
      
      





?







  1. 33 9 .
  2. .
  3. .
  4. 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. , .. .
  2. , .
  3. .


, — . . , , , , . , . :







 :    
:    ,    
 :   
:   ,   
      
      





, .







? — :







(, 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



.







, ?- ().









?



Jelas bahwa semua yang dijelaskan hanyalah bukti konsep, Anda dapat terus mengembangkan topik ini. Misalnya, tambahkan lebih banyak kata ke kamus, perluas tata bahasa untuk menyertakan tenses dan jenis kata yang berbeda. Anda juga dapat menentukan pola puisi baru, berbeda dari puisi klasik, dan memang bidang eksperimen sangat kaya di sini.







Saya harap Anda menikmati artikel ini dan mempelajari sesuatu yang baru. Tautan repositori proyek: prolog-puisi . Ada juga instruksi peluncuran lengkap.








All Articles