рдкреНрд░реЛрд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ 2 рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:
1. рджрд┐рдорд╛рдЧреА рднрд╛рд╖рд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗрд╡рд╛рд▓рд╛
2. рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди
рдкрд╣рд▓реЗ рд╣рдореЗрдВ
SWI- рдкреНрд░реЛрд▓реЙрдЧ рдФрд░ рдХреБрдЫ рдЦрд╛рд▓реА рд╕рдордп рдЪрд╛рд╣рд┐рдПред
рдХрд╛рд░реНрдп 1. рджрд┐рдорд╛рдЧреА рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛
рдЪрд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕реЗред
Brainfuck рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдЧреВрдврд╝ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕реЗ 1993 рдореЗрдВ рдЕрд░реНрдмрди рдореБрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рднрд╛рд╖рд╛ рдореЗрдВ рдЖрда рдХрдорд╛рдВрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд░реЗрдирдлреИрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдЗрди рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред
рдмреНрд░реЗрдирдлрдХ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдПрдХ рдорд╢реАрди рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реЗрдЯ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдХреЗ рдЯреЗрдк рдФрд░ рд╕рд┐рд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЕрд░реНрде рд╣реИ (рдЖрджреЗрд╢ рджреЗрдЦреЗрдВред)ред
рдХрдорд╛рдВрдб рдФрд░ рдЙрдирдХрд╛ рд╡рд┐рд╡рд░рдг:
- > рдЕрдЧрд▓реА рд╕реЗрд▓ рдкрд░ рдЬрд╛рдПрдВ
- <рдкрд┐рдЫрд▓реА рд╕реЗрд▓ рдкрд░ рдЬрд╛рдПрдВ
- + рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдореЗрдВ 1 рд╕реЗ рдорд╛рди рдмрдврд╝рд╛рдПрдВ
- - рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдореЗрдВ рдореВрд▓реНрдп 1 рд╕реЗ рдШрдЯрд╛рдПрдВ
- ред рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдореВрд▓реНрдп
- , рдмрд╛рд╣рд░ рд╕реЗ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
- [рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╛рда рдореЗрдВ рд╕реЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрд╕реА рдХреЗ рдмрд╛рдж рдЖрдЧреЗ рдмрдврд╝реЗрдВ] (рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕рд╣рд┐рдд)
- ] рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреАрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ [(рдЦрд╛рддреЗ рдореЗрдВ рдШреЛрдВрд╕рд▓реЗ рдХрд╛ рд╢рд┐рдХрд╛рд░ рдХрд░рдирд╛)
рдЯреЗрдк рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдбреЗрдЯрд╛ (рдкрддрд╛, рдорд╛рди)ред
рд╕реЗрд▓ рдПрдбреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реЗрдб
рд╕реНрдерд┐рддрд┐ (рдкрддрд╛)ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХреЛрдб:
% , cout:- % pos(Addr), % data(Addr,Value), % put_char([Value]). % . cin:- % pos(Addr), % retract(data(Addr,_)), % get_single_char(Value), % assert(data(Addr,Value)). % + - add(AddValue):- % pos(Addr), % retract(data(Addr,Value)), % 1 NewValue is Value+AddValue, % assert(data(Addr,NewValue)). % > < addr(Side):- % retract(pos(Addr)), % NewAddr is Addr+Side, % assert(pos(NewAddr)), % (data(NewAddr,_),!;assert(data(NewAddr,0))). % ] goto:- % pos(Addr), % 0 data(Addr,Value),Value==0,!, % 0, retract(circle([_|L])), % assert(circle(L)). goto:- % circle([[N,_]|_]), seeing(Stream), seek(Stream,N,bof,_). % [ loop:- % retract(circle(L)), seeing(Stream), % character_count(Stream,Pos), % %( = 0, ) pos(Addr), data(Addr,Value), assert(circle([[Pos,Value]|L])). do:- % get_char(X), % step(X), % not(at_end_of_stream),!, do. do:- % , seeing(Stream), close(Stream), seen. step('['):-loop,!. step(']'):-goto,!. % " " %( ) step(_):-circle([[_,StartValue]|_]),StartValue==0,!. step('>'):-addr( 1),!. step('<'):-addr(-1),!. step(','):-cin,!. step('.'):-cout,!. step('+'):-add( 1),!. step('-'):-add(-1),!. step(_). run(Path):- see(Path), % ( ) retractall(pos(_)), retractall(data(_,_)), retractall(circle(_)), % assert(pos(1)), % 0 assert(data(1,0)), assert(circle([])),do.
рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдЦреЗрдВ:
freest @ PC: $ swipl -s <path.tofile>
? -рд░реБрдг ('рдкрд╛рде.рдЯреЛ.рдмреНрд░реЗрдирдлрдХ.рдХреЛрдб')ред
рд╣рдо
рд╡рд┐рдХреА рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡! рджрд┐рдорд╛рдЧ рдкрд░
+++++++++++ [> ++++++++++++++++++++++++++++ <<<< -]> ++
ред>ред +ред ++++++++ +++ред ++ ++ред << +++++++++++++++++++ред ++ ++ред
------.-------->> +>ред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП:
freest @ PC: / рдореАрдбрд┐рдпрд╛ / C6984667984655D9 $ swipl -s bf.pro
% рдкреБрд╕реНрддрдХрд╛рд▓рдп (swi_hooks) pce_swi_hooks рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд 0.00 рд╕реЗрдХрдВрдб, 2,224 рдмрд╛рдЗрдЯреНрд╕
% /рдореАрдбрд┐рдпрд╛ / C6984667984655D9/bf.pro рд╕рдВрдХрд▓рд┐рдд 0.00 рд╕реЗрдХрдВрдб, 4,676 рдмрд╛рдЗрдЯреНрд╕
рд╕реНрд╡-рдкреНрд░реЛрд▓реЙрдЧ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ (рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб, 32 рдмрд┐рдЯреНрд╕, рд╕рдВрд╕реНрдХрд░рдг 5.10.4)
рдХреЙрдкреАрд░рд╛рдЗрдЯ ┬й 1990-2011 рдПрдореНрд╕реНрдЯрд░реНрдбрдо рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп, VU рдПрдореНрд╕реНрдЯрд░реНрдбрдо
SWI- рдкреНрд░реЛрд▓реЙрдЧ ABSOLUTELY NO WARRANTY рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдпрд╣ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ,
рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЗрд╕рдХрд╛ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛
www.swi-prolog.org рдкрд░ рдЬрд╛рдПрдВред
рдорджрдж рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ? - рдорджрдж (рд╡рд┐рд╖рдп)ред рдпрд╛? - рдПрдкреНрд░реЛрдкреЛрд╕ (рд╢рдмреНрдж)ред
? - рднрд╛рдЧреЛ ('a.txt')ред
рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡!
рд╕рдЪред
- -
рд╕рдорд╕реНрдпрд╛ 2. рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди
рдлрд┐рд░
рд╡рд┐рдХреА рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд
рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди (MT) - рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдкрд░рдлрд╝реЙрд░реНрдорд░ (рдЕрдореВрд░реНрдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдорд╢реАрди)ред рдпрд╣ 1936 рдореЗрдВ рдПрд▓рди рдЯреНрдпреВрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдФрд░ рдЪрд░реНрдЪ рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдЯреНрдпреВрд░рд┐рдВрдЧ рдереАрд╕рд┐рд╕, рдЕрдиреНрдп рд╕рднреА рдХрд▓рд╛рдХрд╛рд░реЛрдВ (рд╕рдВрдХреНрд░рдордг рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ) рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХрд╛рдлреА рдкреНрд░рд╛рдердорд┐рдХ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдХреЛ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдП рдХреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯ рдХреНрдпреВ рдФрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕реЗрдЯ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдорд╢реАрди рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЙрдирдХреЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рд╣реИ: qiaj тЖТ qi1aj1dk (рдпрджрд┐ рд╕рд┐рд░ рдХреНрдпреВрдИ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИ рдФрд░ рдЕрдХреНрд╖рд░ aj рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд┐рдП рдЧрдП рд╕реЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рд┐рд░ qi1 рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, aj1 aj рдХреЗ рдмрдЬрд╛рдп рд╕реЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рд░ aj dk рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ: рд╕реЗрд▓ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдХреЗ рддреАрди рд╡рд┐рдХрд▓реНрдкред (L), рд╕реЗрд▓ рд╕реЗ рджрд╛рдИрдВ рдУрд░ ┬о, рдЬрдЧрд╣ (N) рдкрд░ рд░рд╣реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП <qi, aj> рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдирд┐рдпрдо рд╣реИред рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд╛рд░ рдорд╢реАрди рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрддрд┐рдо рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ, рдЯреЗрдк рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдорд╢реАрди рдХреЗ рдкреНрд░рдореБрдЦ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╣рдо
рд╡реАрдХрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдордЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
q0 * тЖТ q0 * R
q01 тЖТ q01R
q0 ├Ч тЖТ q1 ├Ч R
q11 тЖТ q2aR
q21 тЖТ q21L
q2a тЖТ q2aL
q2 = тЖТ q2 = L
q2 ├Ч тЖТ q3 ├Ч L
q31 тЖТ q4aR
q3a тЖТ q3aL
рдХреНрдпреВ 3 * тЖТ рдХреНрдпреВ 6 * рдЖрд░
q4 ├Ч тЖТ q4 ├Ч R
q4a тЖТ q4aR
q4 = тЖТ q4 = R
q41 тЖТ q41R
q4 * тЖТ q51R
q5 * тЖТ q2 * L
q6a тЖТ q61R
q6 ├Ч тЖТ q7 ├Ч R
q7a тЖТ q7aR
q71 тЖТ q2aR
q7 = тЖТ q8 = L
q8a тЖТ q81L
q8 ├Ч тЖТ q9H
рдбреЗрдЯрд╛ (рдПрд▓, рд╡реА, рдЖрд░) - рдЯреЗрдк рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рдПрд▓ - рдмрд╛рдИрдВ рдУрд░, рдЖрд░ - рджрд╛рдПрдВ, рд╡реА - рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓)ред
... [рез] [реи] [рей] [
рек ] [рел] [рем] [2] ...
L = [3,2,1] V = 4 R = [5,6,7]
рдЦрд╛рд▓реА рд╕реЗрд▓ рдорд╛рди - *
% revers([],R,R):-!. revers([H|T],L,R):-revers(T,[H|L],R). % l:- % (retract(data([Hl|Tl],V,R)),!; % , (*) retract(data([],V,R)),Hl=(*),Tl=[]), % assert(data(Tl,Hl,[V|R])). r:- % (retract(data(L,V,[Hr|Tr])),!; % , (*) retract(data(L,V,[])),Hr=(*),Tr=[]), % assert(data([V|L],Hr,Tr)). % n. % . %revers ( data). initData(L,V,R):- % ( ) retractall(data(_,_,_)), % ( ) revers(L,[],Lr), % . assert(data(Lr,V,R)). % input(Value):- % , . retract(data(L,_,R)), % . assert(data(L,Value,R)). % info(Q:A:Qn:An:D):- % write(Q:A),nl, write(Qn:An:D),nl, % ┬л ┬╗ data(L,Value,R),revers(L,[],Lr),append(Lr,[[Value]|R],Data), write(Data),nl. % %(, , , ). % q0(*,q0,*,r). q0(1,q0,1,r). q0(x,q1,x,r). q1(1,q2,a,r). q2(1,q2,1,l). q2(a,q2,a,l). q2(=,q2,=,l). q2(x,q3,x,l). q3(1,q4,a,r). q3(a,q3,a,l). q3(*,q6,*,r). q4(x,q4,x,r). q4(a,q4,a,r). q4(=,q4,=,r). q4(1,q4,1,r). q4(*,q5,1,r). q5(*,q2,*,l). q6(a,q6,1,r). q6(x,q7,x,r). q7(a,q7,a,r). q7(1,q2,a,r). q7(=,q8,=,l). q8(a,q8,1,l). q8(x,e,x,n). %e тАФ . start(e):-write(end),!. % Q start(Q):- % data(_,A,_), % apply(Q,[A,Qn,An,D]), % info(Q:A:Qn:An:D), % input(An), % call(D), % start(Qn).
рд╣рдо рдПрдордЯреА рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ
$ рд╕реНрд╡рд╛рдЗрд▓ -s 1.pro
? - initData ([], *, [1,1,1, x, 1,1, =, *]]ред
? - рдкреНрд░рд╛рд░рдВрдн (q0)ред
рдФрд░ рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИред
$ рд╕реНрд╡рд╛рдЗрд▓ -s 1.pro
...
? - initData ([], *, [1,1,1, x, 1,1, =, *]]ред
рд╕рдЪред
? - рдкреНрд░рд╛рд░рдВрдн (q0)ред
q0: (*)
q0: (*): рдЖрд░
[[*], резрез,резрез, x, резрез, =, *]
q0: 1
q0: 1: r
[*, [рез], резрез, x, резрез, =, *]
....
....
....
q8: рдП
q8: 1: l
[*, 1,1,1, x, [a], рез, =, рез,рез,рез,рез,рез,рез,рез, *]
q8: x
рдИ: рдПрдХреНрд╕: рдПрди
[*, 1,1,1, [x], 1,1, =, 1,1,1,1,1,1, *]
рдЕрдВрдд
рд╕рдЪред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
- Brainfuck
- рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди
- Prolog