рдлреЛрд░реНрде рд╕реАрдкреАрдпреВред рдпрд╣ рдХреНрдпрд╛ рд╣реИ (рднрд╛рдЧ 2)

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдлреЛрд░реНрде рд╕реАрдкреАрдпреВ рдЬреЗ 1 рдХреЛ рджреЗрдЦрд╛ред рдЕрдм рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд▓рд╛ рдХрд┐рд╕ рддрд░рд╣ рдХреА рднрд╛рд╖рд╛ рд╣реИ , рдФрд░ рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рднрд╛рд╖рд╛ рдХрд╛ рд╡реНрдпрд╛рдХрд░рдг

рдХрд┐рд▓рд╛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рднрд╛рд╖рд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╢рдмреНрдж рд╣реЛрддреЗ рд╣реИрдВ, рд╢рдмреНрдж рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИрдВ:

 open read close 

рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреНрд░рдорд┐рдХ рдкреНрд░рджрд░реНрд╢рди - рдЦреБрд▓рд╛, рдкрдврд╝рд╛ рдФрд░ рдмрдВрджред рдХрд┐рд▓реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:

 \   (   ) 

рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ рдиреЛрдЯреЗрд╢рди (RPN)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 1 2 3 + +  1 2 + 3 + 

рдПрдХ рдХрд┐рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ:
- рдореМрдЬреВрджрд╛ рд╡рд╛рд▓реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЗ рд╢рдмреНрджреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
- рдЗрди рд╢рдмреНрджреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛

рдорд╛рдирдХ рд╢рдмреНрдж

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

noop ( -- ):
+ ( ab -- a+b ):
xor ( ab -- a^b ):
and ( ab -- a&b ):
or ( ab -- a|b ):
invert ( a -- ~a ):
= ( ab -- a==b?1:0 ):
< ( ab -- a<b?1:0 ):
swap ( ab -- ba ):
dup ( a -- aa ):
drop ( ab -- a ):
over ( ab -- aba):
nip ( ab -- b ):
>r ( a -- ):
r> ( -- a ):
@ ( a -- [a] ):
! ( ab -- ): ([b]:=a)
1- ( a -- a-1):

рдЗрди рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рдПрдХ рдПрдПрд▓рдпреВ рдЕрдиреБрджреЗрд╢ рдЬреЗ 1 ("рдХреЛ рдЫреЛрдбрд╝рдХрд░!" рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЪрд╛рд▓ рд╣реИ - рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗ 1 рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ)ред

рдХреБрдЫ рд╢рдмреНрдж рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢рдмреНрдж рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдирдП рд╢рдмреНрдж рдмрдирд╛рдПрдВ

рдПрдХ рд╢рдмреНрдж рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 : my-word ( before -- after ) ........ ; 

рдпрд╣рд╛рдБ, рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдирдП рд╢рдмреНрдж рдХреА рдШреЛрд╖рдгрд╛, рдореЗрд░рд╛ рд╢рдмреНрдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдмреНрдж рд╣реИ, рдЕрдВрдд рдореЗрдВ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рд╡рд╛рдкрд╕реА рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рд╢рдмреНрдж рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдХреЙрд▓ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ RETURNN рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд╢рдмреНрдж рд╣реИ - рд╕рдбрд╝рд╛рдВрдз (abc - bca)ред рдпрд╣ рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдВрддрд┐рдо рддреАрди рдирдВрдмрд░реЛрдВ рдХреА рд╢рд┐рдлреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рддреАрд╕рд░реЗ рдирдВрдмрд░ рдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрддрд╛ рд╣реИ)ред рдЪреВрдВрдХрд┐ рдорд╛рдирдХ рд╢рдмреНрдж рдХреЗрд╡рд▓ рджреЛ рдирдВрдмрд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреАрд╕рд░рд╛ рд╣рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЖрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 : rot ( abc -- bca ) >r ( ab ) swap ( ba ) r> ( bac ) swap ( bca ) ; (  ) 1 2 3 rot (  2 3 1   ) 

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд░реНрджреЗрд╢ рд╣реИ (рддреАрд╕рд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ):

 : merge ( abm -- m?b:a ) >r ( ab ) over xor ( aa^b ) r> and ( aa^b&m ) xor ; 

рдпрд╣ рд╢рдмреНрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдлреЛрд░реНрдЯ рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рд╢рдмреНрдж рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдХреЛрдб рднреА рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди 1970 рдХреЗ рджрд╢рдХ рдореЗрдВ рд╡рд╛рдкрд╕ рдЪрд╛рд░реНрд▓реНрд╕ рдореВрд░ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдЖред

рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛ рддрддреНрд╡

рднрд╛рд╖рд╛ рдореЗрдВ рдЪрд░, рд╕реНрдерд┐рд░рд╛рдВрдХ, рд▓реВрдк, рд╢рд╛рдЦрд╛рдПрдВ рд╣реИрдВред рдЪрд░ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 ( :  constant  ) 0 constant false 1 constant true 42 constant answer ( : variable  ) variable x variable y (  -    .   x=2;y=x+1   ) 2 x ! ( x = 2 ) x @ ( stackTop = x ) 1 + ( stackTop = stackTop + 1 ) y ! ( y = stackTop ) 

рдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рд▓реВрдк..рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрд░рдВрдн ... рд╕реНрдерд┐рддрд┐ рдЬрдм рддрдХ:

 5 begin 1 - dup 0 = until 

рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЦреНрдпрд╛ 5 рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЪрдХреНрд░ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реЗ рдШрдЯрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рд╢реВрдиреНрдп рд╕реЗ рдХрд░реЗрдВ, рдФрд░ рд╢реВрдиреНрдп рди рд╣реЛрдиреЗ рдкрд░ - рдЪрдХреНрд░ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред

рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдирдВрдмрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 (   : condition IF ... THEN condition IF ... ELSE ... THEN ) 

рдпрд╣рд╛рдВ рдореВрд▓ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВред рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдЪрдХреНрд░ рднреА рд╣реИрдВ, рдФрд░ рдХрдИ рдЕрдиреНрдп, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреЛрд╕реНрдЯ рдХреЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдкрд░реЗ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рднрд╛рд╖рд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрджрдд рд╣реИ, рддреЛ рдЖрдк рдХреЛрдб рднреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред J1 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕рдВрдХрд▓рдХ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдЕрдм рддрдХ рдмрд╣реБрдд рдХрдо рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдЗрд╕реЗ рдЧреЛ рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдореБрд▓реЗрдЯрд░ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рдореЗрдВ рдлреЛрд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕реНрдерд╛рди рдмрд╛рдпрдЯреЗрдХреЛрдб рд▓реЗрддрд╛ рд╣реИ (рдХрднреА-рдХрднреА рд╕реА рд╕реЗ рднреА рдХрдо)ред рдлреЛрд░реНрде рдореЗрдВ рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдореИрдВ рдУрдкрдирдлрд░реНрдорд╡реЗрдпрд░ рдФрд░ рдУрдПрд▓рдкреАрд╕реА рд▓реИрдкрдЯреЙрдк рдХреЗ рдмрд╛рдпреЛрд╕ рдХрд╛ рдирд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдУрдкрдирдлреЗрдпрд░рд╡реЗрдпрд░ рднреА)ред рд╡реИрд╕реЗ, рдУрдПрд▓рдкреАрд╕реА рдХреА рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ рдХрд┐рд▓реЗ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рд╣реИ ред

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


All Articles