рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рд░рд┐рдлреНрд▓реЗрдХ рдХрд░реЗрдВред рд╕реЗрд╡рди рд▓рд╛рдЗрдиреНрд╕ рдореИрдЬрд┐рдХ

рдЕрдЧрд░ рдкрд╣рдЪрд╛рдирдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рд╣рд╛рдереА рдХреА рддрд╕реНрд╡реАрд░ рдкрд░ "рдореБрд░рд╛" рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рд╣реИ, рддреЛ рдКрдВрдЯ рдХреА рдЫрд╡рд┐ рднреА "рдореБрд░рд╛" рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдореБрдЦ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрд╛ рдЪрд┐рддреНрд░ рдлрд┐рд░ рд╕реЗ "рдореБрд░рд╛" рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рджреЛрд╖рдкреВрд░реНрдг рд╣реИред рд╡рд╣ рд╕рд┐рд░реНрдл рджрд╛рд░реНрд╢рдирд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡реНрд▓рд╛рджрд┐рдореАрд░ рд╕рд╡рдЪреЗрдиреНрдХреЛ, "рдЦреБрдж рдХреЛ рдЦреЛрд▓рдирд╛"


1. рд▓рд╡ рд░рд┐рдлрд╝рд▓ред рдЗрд╕рдХреЗ рддрддреНрдХрд╛рд▓ рдмрд╛рдж!



рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ - рд░рд┐рдлрд╛рд▓ред Refal рдХрд╛ рд╡рд┐рдХрд╛рд╕ 1966 рдореЗрдВ рд╣рдорд╛рд░реЗ рд╣рдорд╡рддрди рд╡реИрд▓реЗрдВрдЯрд╛рдЗрди рддреБрд░рдЪрд┐рди рдиреЗ рдХрд┐рдпрд╛ рдерд╛ред Refal рдХрд╛ рднрд╛рдЧреНрдп рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рднрд╛рд╖рд╛ рдЕрднреА рднреА рдЬреАрд╡рд┐рдд рд╣реИ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдХреБрдЫ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:


рдЬреЛрд░рджрд╛рд░ рдЕрддрд┐рд░рдВрдЬрдирд╛, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдлрд╛рд▓ рд▓рд┐рд╕реНрдк рдФрд░ рдкреНрд░реЛрд▓реЙрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рддрдерд╛рдХрдерд┐рдд рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ред "рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд╖реНрдХрд░реНрд╖ред"

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Refal рдкрд░ рдПрдХ рдкреИрд▓рд┐рдВрдбреНрд░реЛрдо рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзреЗрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Palindrom { = True; s.1 = True ; s.1 e.2 s.1 = <Palindrom e.2> ; e.1 = False ; } 


рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдирд┐рдпрдо рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЗ рд╢рд░реАрд░ рдХреЛ "=" рдкреНрд░рддреАрдХ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирдореВрдирд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛрди рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред "S" рдФрд░ "e" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдг рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЪрд░ рдХрд╛ рдирд╛рдо рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд▓рд┐рдВрдбреНрд░реЛрдо рдХреА рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдпрд╣ рд░рджреНрдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд░реЗрдлрд▓ рддреБрд▓рдирд╛ рдХреЗ рдЖрдзреБрдирд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд╛рдлреА рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

2. рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ред рдЬрд╛рджреВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ!



Refal рдореЗрдВ рдкреНрд░реЛрд▓реЙрдЧ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рд╣рдо рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рд░рд┐рдлрд╛рд▓реЛрд╡реНрд╕реНрдХреА рддреБрд▓рдирд╛ рдХреЗ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рд╣рд╛рдпрдХ рдХреЛ "рдЙрдкрд╕рд░реНрдЧ" рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдзреЗрдп рдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИред рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд╢реЗрд╖ рдХреЛ рддреАрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 prefix([], [X|Xs], [X|Xs]). prefix([X|Prefix], [X|List], Rest) :- prefix(Prefix, List, Rest). 


рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:

 ?- prefix([1,2], [1,2,3,4], [3,4]). true. ?- prefix([], [1,2,3,4], X). X = [1, 2, 3, 4]. 


рдЕрдм рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдХрд┐ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдлреНрд▓реЗрд╡реЛрд╡ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ (рдЖрдЗрдП рд╣рдо рд╡рд┐рдзреЗрдп "рдЖрд░рдПрдл" рдХрд╣рддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдкреИрд▓рд┐рдВрдбреНрд░реЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП "rf" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рд╣реЛрдЧрд╛):

 palindrom([]). palindrom([_]). palindrom(List) :- rf([s(X1), e(Y), s(X1)], List), palindrom(Y). 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд░реЗрдлрд▓ рдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред рд░рд┐рдлрд╛рд▓реЛрд╡ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЪреМрдерд╛ рдирд┐рдпрдо рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕реНрд╡рдпрдВ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рдЭреВрдареА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдХрд╛рдЯ рджреЗрдЧреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ "s" рдФрд░ "e" рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╢рдмреНрдж рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдкреИрд▓рд┐рдВрдбреНрд░реЛрдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

 ?- palindrom("abc"). false. ?- palindrom("abcba"). true . ?- palindrom("aa"). true . 


рдЕрдм rf рд╡рд┐рдзреЗрдп рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:

 rf([X | Pattern], [X|Xs]) :- rf(Pattern, Xs). rf([s(X) | Pattern], [X|Xs]) :- rf(Pattern, Xs). rf([e(X) | Pattern], Xs) :- prefix(X, Xs, Rest), rf(Pattern, Rest). rf([e(X)], X). rf([], []). 


рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд╛рдЗрди рдкрд░ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ:


3. рдЙрджрд╛рд╣рд░рдг



3.1ред рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг



рдЕрджреНрднреБрдд рд▓реЗрдЦ "рдкреНрд░реЛрд▓реЙрдЧ, рдкрд░рд┐рдЪрдп" рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рд░рд┐рдлрд╛рд▓ рд╕рдореБрджрд╛рдп рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрдерди:

рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ ASCII рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдПрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рд╣реИрдВ, рджреВрд╕рд░реЗ рдореЗрдВ рдмрдбрд╝реЗ рд▓реИрдЯрд┐рди рдкрддреНрд░ рдФрд░ рджреЛ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - * (рддрд╛рд░рд╛рдВрдХрди) рдФрд░? (рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди)ред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд▓рдВрдмрд╛рдИ 1 рд╕реЗ 255 рд╡рд░реНрдг рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рд╕рд╣реА рд╣реИ)ред рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдПрдХ рд╢рдмреНрдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ - рдПрдХ рдкреИрдЯрд░реНрди рдЬрд┐рд╕рдореЗрдВ "?" рдФрд░ "*" DOS рдпрд╛ рдпреВрдирд┐рдХреНрд╕-рд╢реЗрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЗ рд╕рдорд╛рди рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╡рд░реНрдгреЛрдВ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд "?" рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдордирдорд╛рдиреЗ рдЪрд░рд┐рддреНрд░ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ "*" рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдордирдорд╛рдиреЗ рдЪрд░рд┐рддреНрд░реЛрдВ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ - 0 рдпрд╛ рдЕрдзрд┐рдХ (рдпрд╛рдиреА, рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рд╢рдмреНрдж рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рддреЛ рдпрд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ), рдпрд╛ рдирд╣реАрдВ рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рд╣рд╛рдВ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди:

 Match { s.1 e.2 (s.1 e.3) = <Match e.2 (e.3)>; s.1 e.2 ('?' e.3) = <Match e.2 (e.3)>; e.1 ('*' e.3) = { e.1 : e.11 e.12, <Match e.12 (e.3)>; }; /*empty*/ () = /*yes*/; }; 


рд╣рдо рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рд░реЗрдлрд▓ рд╡рд┐рдзреЗрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 ischar(H, [H]). match([],[]) :- !. match("*",_) :- !. match(Pattern, Word) :- rf([s(T1), e(E1)], Pattern), rf([s(T1), e(E2)],Word), match(E1, E2),!. match(Pattern, Word) :- rf([s(T1), e(E1)], Pattern), ischar(T1, "?"), rf([s(_T2), e(E2)], Word), match(E1,E2),!. match(Pattern, Word) :- rf([s(T1), e(E1)], Pattern), ischar(T1, "*"), rf([e(_E21), e(E22)], Word), match(E1,E22),!. check:- match("ASDFAASDASDAAASDASDASD", "ASDFAASDASDAAASDASDASD"), match("*", "ASDFAASDASDAAASDASDASD"), match("A?DF?A*ASD*ASDA?DASD", "ASDFAASDASDAAASDASDASD"), \+ match("ASDFAASDADAAASDASDASD", "ASDFAASASDAAASDASDASD"). 


рдзреНрдпрд╛рди рджреЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, "рдкрд░рд┐рднрд╛рд╖рд╛ , рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛" рд▓реЗрдЦ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрд╣реБрдд рдХрдо рдкреНрд░рднрд╛рд╡реА рд╣реИред

3.2ред рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг



рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╡рд┐рдзреЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╣рдо рдПрдХ рддреБрдЪреНрдЫ рд╡рд┐рдзреЗрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

 ?- infix("2+2*2", R). R = 6. ?- infix("1+1+1+1", R). R = 4. 


рдЗрдиреНрдлрд┐рдХреНрд╕ рдХреЛ рдХреЗрд╡рд▓ рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдордЭреЗрдВред рддрдм рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 ischar(H, [H]). infix(A,R) :- rf([e(X), OpPlus, e(Y)], A), ischar(OpPlus, "+"), infix(X,R1), infix(Y,R2), R is R1 + R2,!. infix(A,R) :- rf([e(X), OpMul, e(Y)], A), ischar(OpMul, "*"), infix(X,R1), infix(Y,R2), R is R1 * R2, !. infix(A,R) :- rf([e(X)], A), number_codes(R, X),!. 


рд╣рдо рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп



рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЕрджреНрд╡рд┐рддреАрдп рдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдпрд╣ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрд▓реЙрдЧ рдФрд░ рд░реЗрдлрд▓ рдЬреИрд╕реА рдЕрджреНрднреБрдд рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдкрд╛рдардХ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/In198972/


All Articles