рдШрд╛рдЯреА рдХрд╛ рджреГрд╢реНрдп
рдЖрдк рдЗрд╕рдХреА рдкрд╢реНрдЪрд┐рдо рдХреА рджреАрд╡рд╛рд░ рдкрд░ рдЧреНрд░реЗрдЯ рдХреИрдиреНрдпрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕реЗ рдШрд╛рдЯреА рдФрд░ рдлреНрд░рд┐рдЧрд┐рдб рдирджреА рдХреЗ рдКрдкрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рджреГрд╢реНрдп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдШрд╛рдЯреА рдХреЗ рдкрд╛рд░, рд╡реНрд╣рд╛рдЗрдЯ рдХреНрд▓рд┐рдл рдХреА рджреАрд╡рд╛рд░реЗрдВ рдкреВрд░реНрд╡ рдХреА рдУрд░ рдлреНрд▓реИрдереЗрдб рдкрд░реНрд╡рдд рдХреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░рд╛рдЪреАрд░ рд╕реЗ рдорд┐рд▓рддреА рд╣реИрдВред рдЙрддреНрддрд░ рдХреА рдУрд░ рдШрд╛рдЯреА рдХреЗ рдКрдкрд░, Aragain рдлреЙрд▓реНрд╕ рдХреЛ рдЗрдВрджреНрд░рдзрдиреБрд╖ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдлреНрд░рд┐рдЧрд┐рдб рдирджреА рдПрдХ рдорд╣рд╛рди рдЕрдВрдзреЗрд░реЗ рдЧреБрдлрд╛ рд╕реЗ рдмрд╣рддреА рд╣реИред рдкрд╢реНрдЪрд┐рдо рдФрд░ рджрдХреНрд╖рд┐рдг рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЬрдВрдЧрд▓ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рдореАрд▓реЛрдВ рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЙрддреНрддрд░ рдкрд╢реНрдЪрд┐рдо рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдШрд╛рдЯреА рдореЗрдВ рдЪрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд╕рд╛рдордЧреНрд░реА:
рдЧреНрд░реАрдЯрд┐рдВрдЧрднрд╛рдЧ 1 - рдЖрдЧреЗрднрд╛рдЧ 2 - рд╡рдирднрд╛рдЧ 3 - рдкреЛрд▓реАрдирд╛рднрд╛рдЧ 4 - рдШрд╛рдЯреА рдХрд╛ рджреГрд╢реНрдпрднрд╛рдЧ 5 - рд╣реЙрд▓рднрд╛рдЧ рек
рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ, рдФрд░ рдЦреЛрдЬ рд╕реЗ рдмрд╛рд╣рд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ? рдФрд░ рдлрд┐рд░ рдмреЛрд▓реЗ - рдпрд╣ рд╕рдордп рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд░рди рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд╣рд╛рдВ рд╕рднреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдЗрд╕рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рди рд▓реАрдЬрд┐рдП, рд░рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╕реНрдерд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫред рддреЛ, рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реЗ рдпрд╣ рд╕реНрдерд╛рди рджреЗрдВрдЧреЗ:
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction ( ConvertStringToAction x ) )
рд╕рдм рдареАрдХ рд╣реИред рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рдХреНрд░рд┐рдпрд╛: рджреЗрдЦреЛ !
* рдореБрдЦреНрдп рдпрд╛
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЫреЛрдЯрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпрд╛ рд╣реИ! рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реАрдВ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рдХреЛрдИ рдЦреЗрд▓ рдирд╣реАрдВ рд╣реИред рдЧреЗрдореНрд╕ рдореЗрдВ, рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЖрдорддреМрд░ рдкрд░ рд▓реВрдк рдореЗрдВ рдШреВрдорддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХреНрдЬрд╝рд┐рдЯ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: рдЦреЗрд▓ рдХреЛ рддрдм рддрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЗрд╕реЗ "рдЫреЛрдбрд╝" рди рджреЗрдВред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд░рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЦреБрдж рд╕реЗ рд░рди рдХреЙрд▓ рдХрд░рдирд╛ред рдЗрд╕рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, - рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди, - рдЬрдмрдХрд┐ рд╣рдо рдкреБрд░рд╛рдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдж рдореЗрдВ рд╣рдо рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction ( ConvertStringToAction x ) )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n " - рдирдИ рдЪрд╛рд▓ - рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╕реЗред
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
- рдкрд░реАрдХреНрд╖рдг:
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рдХреНрд░рд┐рдпрд╛: рджреЗрдЦреЛ !
рдмрд╛рд░реА рдХрд╛ рдЕрдВрдд ред
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
Enter рдХрдорд╛рдВрдб: < Ctrl + C > рдмрд╛рдзрд┐рдд ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╕реЗ рдмреИрд░рд▓ рдЕрдВрдЧ рдиреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдкрд░реНрдпрд╛рдкреНрдд рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ <Ctrl + C> рд╣реИред рдФрд░ рдХреНрд╡рд┐рдЯ рдХрдорд╛рдВрдб рдореЗрдВ рдЙрд╕рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝реА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рд╣рдо рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn ┬лрдЖрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...┬╗
рдЕрдиреНрдпрдерд╛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ( ConvertStringToAction x ) )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n "
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
рд╣рд╛рдБ, рдХреБрдЫ рдЖрдЗрдП рдпрд╣ рдЪреЗрд╣рд░рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ! ..ред рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреАрд╡рд░реНрдб рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ? рдХреЗрд╡рд▓ рдЪрд╛рд░: (рд╕реНрдерд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ) - (рд▓рд╛рдЗрди рджрд░реНрдЬ рдХрд░реЗрдВ "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: () - (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд░ x рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдХрд░реЗрдВ) - (рдХреЗрд╕-рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдВрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ)ред рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдХрд▓реНрдк рдкрд░ рдХреВрдж рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ "рдЫреЛрдбрд╝ рджрд┐рдпрд╛" рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди (ConvertStringToAction x) рдХреНрд╡рд┐рдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ - рдкреНрд░рд┐рдВрдЯ ┬лрдЖрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...┬╗ рд▓рд╛рдЗрдиред рдХрд╣реАрдВ рднреА рдХреЛрдИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рд╣реИ - рди рддреЛ рдХреНрд╡рд┐рдЯ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрдВрджрд░, рди рд╣реА рдХреЗрд╕-рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рдмрд╛рдж, рдЗрд╕рд▓рд┐рдП рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдЫреЛрдбрд╝реЛ" рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "рджреЗрдЦреЛ," рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрд╡рд┐рдЯ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди
рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЧрд╛рд░реНрдб рдкрд░ рд░рд╣рддрд╛ рд╣реИ - рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред рдФрд░ рдХреНрдпрд╛ рд╣реИ? рдПрдХ рдФрд░ рдХреАрд╡рд░реНрдб рдХрд░рддреЗ рд╣реИрдВ! рддреЛ, рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдирдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдпрд╣рд╛рдВ рд╢реБрд░реВ рд╣реБрдИ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд░рдгреЛрдВ рдореЗрдВред рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ? рдХреЗрд╡рд▓ рддреАрди: (рдкреНрд░реЛрд╕реЗрд╕реНрдб рдХрдорд╛рдВрдб рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ) - (рд▓рд╛рдЗрди рдХреЛ "рдПрдВрдб рдСрдл рдЯрд░реНрдиред \ N" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ) - (рд░рди рдлрдВрдХреНрд╢рди рдХреЛ рд░рди рдХрд░реЗрдВ)ред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ: рдпреЗ рд╕рднреА рдорд╛рдорд▓реЗ, рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рддреАрд░! рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВред
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рдХреНрд░рд┐рдпрд╛: рджреЗрдЦреЛ !
рдмрд╛рд░реА рдХрд╛ рдЕрдВрдд ред
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЫреЛрдбрд╝реЗрдВ
рджреЗрдЦрд╛ рдЖрдкрдиреЗ ...
* рдореБрдЦреНрдп рдпрд╛
рд╣реБрд░реНрд░реЗ! рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд░рди рдлрдВрдХреНрд╢рди рдЕрднреА рднреА рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдмрд╛рд░ рдХреЙрд▓ (ConvertStringToAction x) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣ рдЦрд░рд╛рдм рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдлрд╝рдВрдХреНрд╢рди ConvertStringToAction рд╕рд░рд▓ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдУрд╡рд░рд░рди рд╣реЛрдЧрд╛ред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЙрд▓ рд╣рдорд╛рд░реЗ рдХреЗрд╕-рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ:
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
ConvertResult -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ConvertResult )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n " - рдирдИ рдЪрд╛рд▓ - рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╕реЗред
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
рд╣рд╛рдВ,
рдЕрдиреНрдпрдерд╛ рдХреЗ рдмрдЬрд╛рдп
, ConvertResult рдЪрд░ рдЕрдм рд╣реИред рдпрджрд┐ рдХреБрдЫ рдореВрд▓реНрдп рдкрд░ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдмрд╛рд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдЗрд╕ рдорд╛рди рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП,
рдЕрдиреНрдпрдерд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред
рдЦреИрд░, рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред
рдЗрдВрдбреЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рд╡реЗ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ; рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ "рдХрд░реЛ" рдХреЗ рд▓рд┐рдП, рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдареАрдХ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред рдпрд╣ рд╕реНрддрд░ рддрдХ рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рдЕрдиреНрдпрдерд╛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ( ConvertStringToAction x ) )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n " - рдирдИ рдЪрд╛рд▓ - рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╕реЗред
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдкрдирд╛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХрд┐рд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдк рд╡рд┐рдЪрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ! рдмреЗрд╢рдХ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдареАрдХ рд╣реА рддреЛ рд╣реИ! рдХрд┐рд╕реА рджрд┐рди рд▓реБрдХ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ (рдФрд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рдирд╣реАрдВ) рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЧреЛ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЗрд╕реЗ Zork рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХреНрд▓рд┐рдпрд░рд┐рдВрдЧ
...
> рдкрд╢реНрдЪрд┐рдо рдЬрд╛рдУ
рд╡рди
...
рдпрджрд┐ рд╣рдо "рдЧреЛ рд╡реЗрд╕реНрдЯ" рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдорд╛рдВрдб рдкрд╛рд░реНрд╕рд░ рджреБрдЦреА рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП:
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдПрдВрдЯрд░ рдХрдорд╛рдВрдб: рдЧреЛ рд╡реЗрд╕реНрдЯ
*** рдЕрдкрд╡рд╛рдж: рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ ред рдкрдврд╝реЗ : рдирд╣реАрдВ
рд╢рд╛рдпрдж рд╣рдо "рдЧреЛ рд╡реЗрд╕реНрдЯ" рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреЛ рдФрд░ рд╡реЗрд╕реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ? рд╡рд┐рдЪрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди ... рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рдЬрд╛рджреБрдИ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдпрджрд┐ рдпрд╣ рдЧреЛ рд╡реЗрд╕реНрдЯ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рджреВрд░ рд╕реЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЗрдирд╕реЗрдЯ рдерд╛ рдХрд┐ рдПрдбреАрдЯреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рдЧреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдкрд╢реНрдЪрд┐рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред
* рдореБрдЦреНрдп: рдЯрд╛рдЗрдк рд╣реЛрдо
рдШрд░ :: рд╕реНрдерд╛рди
* рдореБрдЦреНрдп: рдкреНрд░рдХрд╛рд░ рдкрд╢реНрдЪрд┐рдо
рдкрд╢реНрдЪрд┐рдо :: рджрд┐рд╢рд╛
* рдореБрдЦреНрдп: рдЯрд╛рдЗрдк рдЧреЛ
рдЬрд╛рдУ :: рдХреНрд░рд┐рдпрд╛
рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рд╣реИред рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рд╕рд╣реА рд╣реИред "рдпрджрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛рд░реНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рднреА рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?" рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рд╣рд╛рдБ! ADT рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдЗрд╕ рдпрд╛ рдЙрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЧреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВред
рдбреЗрдЯрд╛ рдПрдХреНрд╢рди =
рджреЗрдЦреЛ
| рджрд┐рд╢рд╛ рдЬрд╛рдУ
| рдЗрдиреНрд╡реЗрдВрдЯрд░реА
| рд▓реЗрдирд╛
| рдбреНрд░реЙрдк
| рдЬрд╛рдВрдЪ
| рдЫреЛрдбрд╝рдирд╛
| рд╕рд╣реЗрдЬреЗрдВ
| рднрд╛рд░
| рдирдИ
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдПрдХ рджрд┐рд╢рд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░ рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
* рдореБрдЦреНрдп рд╢реЛ ( рдЧреЛ рд╡реЗрд╕реНрдЯ )
рдкрд╢реНрдЪрд┐рдо рдЬрд╛рдУ
* рдореБрдЦреНрдп : "рдЧреЛ рдиреЙрд░реНрде" :: рдПрдХреНрд╢рди рдкрдврд╝реЗрдВ
рдЙрддреНрддрд░ рдЬрд╛рдУ
* рдореБрдЦреНрдп: рдЯреА рдЧреЛ
рдЧреЛ :: рджрд┐рд╢рд╛ -> рдХреНрд░рд┐рдпрд╛
рдпрд╣рд╛рдБред рдФрд░, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдПрдХ рд╕рдордЧреНрд░ рдирд┐рд░реНрдорд╛рддрд╛ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ! рд░рди рдХреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рдЧреЛ dir -> putStrLn ( "рдЖрдк рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ" ++ рд╢реЛ dir ++ "!"
ConvertResult -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ConvertResult )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n " - рдирдИ рдЪрд╛рд▓ - рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╕реЗред
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
- рдЬрд╛рдВрдЪреЗрдВ:
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдПрдВрдЯрд░ рдХрдорд╛рдВрдб: рдЧреЛ рд╡реЗрд╕реНрдЯ
рдЖрдк рдкрд╢реНрдЪрд┐рдо рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ !
рдпрджрд┐ рдкрд╛рд░реНрд╕рд░ рд▓рд╛рдЗрди рдореЗрдВ "рдЧреЛ рд╕рдордерд┐рдВрдЧ" рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк "рдЧреЛ рдбрд┐рд░" рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рд╡рд╣реА "рд╕рдордерд┐рдВрдЧ" рдбрд╛рдпрд░ рдЪрд░ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рдЦреИрд░, рдлрд┐рд░ рд╣рдо рдбреАрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рджреВ!
рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмреЗрд╣рддрд░ рд╣реИред рд╢рд╛рдпрдж рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреАрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ "рдбрдВрдм рдХреИрд▓рдХреБрд▓реЗрдЯрд░" рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:
data IntegerArithmOperation =
рдкреНрд▓рд╕ рдЗрдВрдЯреЗрдЧрд░ рдЗрдВрдЯреЗрдЧрд░
| рдорд╛рдЗрдирд╕ рдкреВрд░реНрдгрд╛рдВрдХ рдкреВрд░реНрдгрд╛рдВрдХ
| рдкреНрд░реЛрдбреНрдпреВрд╕рд░ рдЗрдВрдЯреЗрдЧрд░ рдЗрдВрдЯреЗрдЧрд░
| рдиреЗрдЧреЗрдЯ рдЗрдВрдЯреЗрдЧрд░
evalOp :: IntegerArithmOperation -> рдкреВрд░реНрдгрд╛рдВрдХ
evalOp op = case op рдХрд╛
рдкреНрд▓рд╕ x y -> x + y - "op" рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдорд╛рдЗрдирд╕ x y -> x - y - рдХреМрди рд╕рд╛ рдирдореВрдирд╛ рдЖрдпрд╛, рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред
рдЙрддреНрдкрд╛рджрди x y -> x * y - x рдФрд░ y рдХреЗ рдмрдЬрд╛рдп, рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХреА рд╣реИ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдиреЗрдЧреЗрдЯ x -> - x - рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 * 3 = 6ред
* рдореБрдЦреНрдп : evalOp ( рдкреНрд▓рд╕ 2 3 ) - (рдкреНрд▓рд╕ 2 3) рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред
5
* рдореБрдЦреНрдп : evalOp ( рдорд╛рдЗрдирд╕ 2 3 )
- 1
* рдореБрдЦреНрдп : evalOp ( рдЙрддреНрдкрд╛рджрди 2 3 )
6
* рдореБрдЦреНрдп : evalOp ( рдиреЗрдЧреЗрдЯ 5 )
- 5
рдХреНрдпрд╛ рд╣рдо рд╕рд╛рд╣рд╕реА рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдЧрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдореЗрдВ рд╕рдордп рдЕрдВрдХрди? рдореБрдЯреНрдареА рдореЗрдВ рддрд╛рдХрдд рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ! рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЙрдХ рдлрдВрдХреНрд╢рди (рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рдХрд╛рд░реНрдп) рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдФрд░ рдЖрдВрджреЛрд▓рди рдХреА рджрд┐рд╢рд╛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рд╕реНрдерд╛рди рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╣реИ:
рдЪрд▓рдирд╛ :: рд╕реНрдерд╛рди -> рджрд┐рд╢рд╛ -> рд╕реНрдерд╛рди
curLoc toDir = рдорд╛рдорд▓рд╛ curLoc рдЪрд▓рдирд╛
рдШрд░ -> рдорд╛рдорд▓рд╛
рдЙрддреНрддрд░ -> рдЧрд╛рд░реНрдбрди
рджрдХреНрд╖рд┐рдг -> рдорд┐рддреНрд░ рдХреА рд╡рд╛рдпрд░реНрдб
рдЕрдиреНрдпрдерд╛ -> рдШрд░
рдмрдЧреАрдЪрд╛ -> рдорд╛рдорд▓рд╛
рдЙрддреНрддрд░ -> рдорд┐рддреНрд░ рдХреА рд╡рд╛рдпрд░реНрдб
рджрдХреНрд╖рд┐рдг -> рдШрд░
рдЕрдиреНрдпрдерд╛ -> рдЧрд╛рд░реНрдбрди
- ... рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рднрдпрд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгред рдЗрддрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо! рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдХреЗрд╕! рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рд╣реЛрдЧрд╛, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рд▓реЗрдХрд░ рдЖрдПрдВрдЧреЗ, рдФрд░ рдЕрдм рд╣рдо рдХреЗрд╡рд▓ рдЪрд▓ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЛрдИ рдорд╛рдорд▓рд╛ рди рд╣реЛ:
рдЪрд▓рдирд╛ :: рд╕реНрдерд╛рди -> рджрд┐рд╢рд╛ -> рд╕реНрдерд╛рди
рдШрд░ рдЪрд▓рдирд╛ = рдмрд╛рдЧ
рдШрд░ рджрдХреНрд╖рд┐рдг рдЪрд▓рдирд╛ = рдорд┐рддреНрд░ рдХреА рд╡рд╛рдпрд░реНрдб
рд╡реЙрдХ рдЧрд╛рд░реНрдбрди рдиреЙрд░реНрде = рдлреНрд░реЗрдВрдбреНрд╕ рд╡рд╛рдпрд░реНрдб
рд╡реЙрдХ рдЧрд╛рд░реНрдбрди рд╕рд╛рдЙрде = рд╣реЛрдо
рдЪрд▓рдирд╛ рджреЛрд╕реНрдд рдХреА рдЙрддреНрддрд░ = рдШрд░
рд╡реЙрдХ рдлреНрд░реЗрдВрдбреНрд╕рдпрд╛рд░реНрдб рд╕рд╛рдЙрде = рдЧрд╛рд░реНрдбрди
рд╡реЙрдХрд▓ рдХрд░рд▓реЛрдХ = = рдХрд░реНрд▓реЛрдХ
рд╡рд╛рд╣, рдХрд┐рддрдиреЗ рдЪрд▓рддреЗ рд╣реИрдВ! рдФрд░ рд╕рднреА рд╕рдорд╛рди рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЬрдм рд╣рдо рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЯрд╣рд▓рдиреЗ рдХреЗ рдлреЛрди рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╡реЙрдХ рдЧрд╛рд░реНрдбрди рд╕рд╛рдЙрде" - рдФрд░ рдЪреМрдерд╛ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдШрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
* рдореБрдЦреНрдп : рдЧрд╛рд░реНрдбрди рд╕рд╛рдЙрде рдХреА рд╕реИрд░ рдХрд░реЗрдВ
рдШрд░
рдмреНрдпрд╛рдЬ рдЕрдВрддрд┐рдо рдЪрд▓рдирд╛ рд╣реИред рд╡рд╣ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╣рд░ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рдореЗрдВ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░реНрд▓реЙрдХ рдЪрд░ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╣реАрдВ рднреА рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рд╛рдЗрди рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдкрд░реНрдЪреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрдбрд░рд▓рд╛рдЗрди рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдПрдХ рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд░реЗрдВ; рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдШрд┐рд╕реА-рдкрд┐рдЯреА рдбрд╛рдВрдЯ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдк рдЗрддрдиреЗ рдЪрдВрдЪрд▓ рдХреНрдпреЛрдВ рд╣реИрдВ? ..
......
рдЪрд▓рдирд╛ рджреЛрд╕реНрдд рдХреА рдЙрддреНрддрд░ = рдШрд░
рд╡реЙрдХ рдлреНрд░реЗрдВрдбреНрд╕рдпрд╛рд░реНрдб рд╕рд╛рдЙрде = рдЧрд╛рд░реНрдбрди
рд╡реЙрдХрд▓ рдХрд░реНрд▓реЛрдХ = рдХрд░реНрд▓реЛрдХ
* рдореБрдЦреНрдп: рдЖрд░
[ рез рдХрд╛ рез ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 50 : 1 :
'рд╡реЙрдХ' рдХреЗ рд╕рдореАрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 50 : 1 - 24
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 56 : 1 - 22
рд╡рд┐рдлрд▓ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛: рдХреЛрдИ рдирд╣реАрдВ ред
рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди, рдЬреЛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕реНрдкрд╖реНрдЯ, рд╕реБрд░рдХреНрд╖рд┐рдд, рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреА рдЕрдиреНрдп рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЖрдк рди рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ, рдмрд▓реНрдХрд┐ рдЪрд░ рднреА "рд╣рдереЗрд▓реА рдмрдВрдж" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢рдмреНрдж рдХреЛ рдЗрд╕рдХреЗ рдШрдЯрдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕реВрдЪреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдФрд░ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╢реАрд░реНрд╖рд▓реЗрдЦ :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдЪрд╛рд░
рд╢реАрд░реНрд╖рд▓реЗрдЦрдХ ( ch: chs ) = ch
tailLetters :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
tailLetters ( ch: chs ) = chs
* рдореБрдЦреНрдп " рд╣реЗрдбрд▓реЗрдЯрд░ " рдЕрдкрд╣рд░рдг "
'рдП'
* рдореБрдЦреНрдп " рдЯреЗрд▓рд▓реЗрдЯрд░реНрд╕ " рдЕрдкрд╣рд░рдг "
┬лBduction┬╗
рдЕрдВрддрд┐рдо рдЪрд░рдг рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реИ: рд╣рдо рдЧреЛ dir рдХреЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, "\ n You рдЪрд▓рддрд╛ рд╣реИ" ++ рд╢реЛ dir ++ "ред \ N" рдкрд░ рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдореЗрдВ рдирдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдорд┐рд▓рддрд╛ рд╣реИред ред
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn ┬лрдЖрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...┬╗
рдЧреЛ рджрд┐рд░ -> рдХрд░реЛ
putStrLn ( " \ n рдЖрдк рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП" ++ рд╢реЛ dir ++ "ред \ n " )
рд░рди ( рд╡реЙрдХ рдХрд░реНрд▓реЛрдХ рджрд┐рд░ )
ConvertResult -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ConvertResult )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n "
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
- рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
* рдореБрдЦреНрдп : рдШрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ
рдШрд░
рдЖрдк рдЦрдбрд╝реЗ рд╣реИрдВ ...
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЙрддреНрддрд░ рдЬрд╛рдУ
рдЖрдк рдЙрддреНрддрд░ рдХреА рдУрд░ рдЪрд▓рдирд╛ ред
рдЙрджреНрдпрд╛рди
рдЖрдк рдмрдЧреАрдЪреЗ рдореЗрдВ рд╣реИрдВ ред ...
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдЬрд╛рдУ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реИред рд╣рдо рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рд╕реА ++ рдЬреИрд╕реА рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдПрдВ рд╣рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ; рд╣рдо рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╣рдЬрд╝рд╛рд░ рдмрд╛рд░ рднреА рд╕реНрдкрд┐рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╕реЗ рдбрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдХ рд╣реА рд╕реА ++ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рддреЛ, рдХреЗрд╡рд▓ рдЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬрд┐рдирдХреА рдпрд╣рд╛рдВ рд╕реАрдзреЗ рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЕрдм рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдиреНрдп рдХреЛрдб рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкрд░рдд рдкрд░ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдПрдХ рдмрд╛рд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереАред рд╣рд╕реНрдХреЗрд▓ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реИ - рдореЗрдореЛрд░реА рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рдЕрдВрдд рдореЗрдВ, рдкреВрдВрдЫ рдХреЙрд▓ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдХреЗ, рд╕рдВрдХрд▓рдХ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред
рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдВрддрд┐рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
- test.hs:
рдореЙрдбреНрдпреВрд▓ рдореБрдЦреНрдп рдЬрд╣рд╛рдВ
рддрдВрддреБрдУрдВ = 0 : 1 : zipWith ( + ) рддрдВрддреБрдУрдВ ( рдкреВрдВрдЫ рддрдВрддреБ )
cnt рдЪрд▓рд╛рдирд╛ = рдХрд░рдирд╛
putStrLn ( " \ n рдЯрд░реНрди рдХрд╛рдЙрдВрдЯ:" ++ рд╢реЛ cnt )
putStrLn $ рджрд┐рдЦрд╛рдиреЗ $ рдкрд┐рдЫрд▓реЗ $ cnt рд▓реЗ fibs
рд░рди ( cnt + 1 )
рдореБрдЦреНрдп = рдХрд░рддреЗ рд╣реИрдВ
1 рдЪрд▓рд╛рдПрдВ
рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди:
ghc - O рдкрд░реАрдХреНрд╖рдг ред hs
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдб рдСрд░реНрдбрд░ рдкрд╕рдВрдж рд╣реИ? рд╣рдорд╛рд░реА рдЦреЛрдЬ рдХрд╛ рдХреЛрдб, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ: рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБред рдЗрд╕реЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рд╣рдордиреЗ рдЬреАрдПрдЪрд╕реАрдЖрдИ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рджреЛрд╕реНрдд рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдХреЛрдб рдЙрд╕реЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рджреЛрд╕реНрдд, рд╢рд╛рдпрдж рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЖрд╕рд╛рди рд╣реИред рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ghc рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ, рдЬреЛ рдХреНрд╡реЗрд╕реНрдЯрдорд╛рдЗрди рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
H: \ Haskell \ QuestTutorial \ Quest > gh QuestMain ред hs
[ рез рдХрд╛ рез ] рд╕рдВрдХрд▓рди рдореЗрди ( рдХреНрд╡реЗрд╕реНрдЯрдореЗрди ред рдПрдЪрдПрд╕ , рдХреНрд╡реЗрд╕реНрдЯрдореЗрди.рдУ )
рдХреНрд╡реЗрд╕реНрдЯрдорд╛рдЗрди ред hs: 1 : 1
рдлрд╝рдВрдХреНрд╢рди 'рдореБрдЦреНрдп' рдореЙрдбреНрдпреВрд▓ 'рдореЗрди' рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
GHC рд╕рдВрдХрд▓рдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрд╣ рдХреИрд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдмрдирддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреАред рдЗрд╕реЗ QuestMain.hs рдлрд╝рд╛рдЗрд▓ рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ:
рдореБрдЦреНрдп = рдХрд░рддреЗ рд╣реИрдВ
PutStrLn "рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдХреНрд╡реЗрд╕реНрдЯ рд╕рд╛рд╣рд╕рд┐рдХред \ n "
рдШрд░ рдЪрд▓рд╛рдУ
рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдп рдЭреВрда рд╣реЛрдВрдЧреЗ:
рдореЙрдбреНрдпреВрд▓ рдореБрдЦреНрдп рдЬрд╣рд╛рдВ
рдЕрдм рд╕рдВрдХрд▓рдХ рд╕реНрд░реЛрдд рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВрдЧреЗред рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ QuestMain.exe рд╣реИред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рди .o рдФрд░ .hi рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА - рдпреЗ рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ (рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓)ред рдпрджрд┐ рд╡реЗ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЫреЛрдЯреА рд╣реИ, рд╡реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╡реЗ, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣, рдЖрдВрд╢рд┐рдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдВрдХрд▓рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдмрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреБрди: рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдкреБрд░рд╛рдиреА .o рдФрд░ .hi рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЗрдВред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ; рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ - рдореЙрдбреНрдпреВрд▓ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рджреНрд╡рд╛рд░рд╛; рдФрд░ рднреА рдмреЗрд╣рддрд░ - рдореЙрдбреНрдпреВрд▓, рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ред
рдЖрдЗрдП рд╣рдорд╛рд░реА рдЦреЛрдЬ рдХреЛ рджреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ: рдкреНрд░рдХрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдЯрд╛рдЗрдкреНрд╕ рдлрд╝рд╛рдЗрд▓, рдмрд╣реБрдд рдКрдкрд░ рдЗрд╕реЗ "рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░ рдЬрд╣рд╛рдБ" рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреНрд╡реЗрд╕реНрдЯрдореИрдиреНрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рднреА рдПрдбреАрдЯреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
- Types.hs:
рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛рдБ
рдбреЗрдЯрд╛ рд╕реНрдерд╛рди =
рдШрд░
| ...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )
рдбреЗрдЯрд╛ рджрд┐рд╢рд╛ =
рдЙрддреНрддрд░
| ...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )
рдбреЗрдЯрд╛ рдПрдХреНрд╢рди =
рджреЗрдЦреЛ
| рджрд┐рд╢рд╛ рдЬрд╛рдУ
| ...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )
рдпрджрд┐ ghci рдЕрдм рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ: r, рджреБрднрд╛рд╖рд┐рдпрд╛ рдШрдмрд░рд╛ рдЬрд╛рдПрдЧрд╛: рдпрд╣ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ!
* рдореБрдЦреНрдп: рдЖрд░
[ рез рдХрд╛ рез ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 4 : 21 :
рд╕реНрдХреЛрдк рдореЗрдВ рдирд╣реАрдВ: рдЯрд╛рдЗрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдХреНрд▓рд╛рд╕ 'рд▓реЛрдХреЗрд╢рди'
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 7 : 13 :
рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ: рдбреЗрдЯрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ 'рд╣реЛрдо'
H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 8 : 13 :
рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ: рдбреЗрдЯрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ 'рдлреНрд░реЗрдВрдбреНрд╕ рд╡рд╛рдпрд░реНрдб'
... рдФрд░ рдРрд╕реА рдмреАрд╕ рдФрд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ ред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ >
рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛! рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдФрд░ рд╡реЗ рдореБрдЦреНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛рдПрдЧреАред "рдореЙрдбреНрдпреВрд▓ рдореЗрди рдХрд╣рд╛рдБ" рдХреЗ рддрд╣рдд рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╣реАрдВ, рдПрдХ рд╕рд░рд▓ рд░реЗрдЦрд╛ рдЬреЛрдбрд╝реЗрдВ:
- QuestMain.hs:
рдореЙрдбреНрдпреВрд▓ рдореБрдЦреНрдп рдЬрд╣рд╛рдВ
рдЖрдпрд╛рдд рдкреНрд░рдХрд╛рд░
- ... рдмрд╛рдХреА рдХреЛрдб ...
рдЕрдм рд╕рдВрдХрд▓рди рд╕рдлрд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рд╕рдВрдХрд▓рд┐рдд рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ > : рдЖрд░
[ 1 рдХрд╛ 2 ] рд╕рдВрдХрд▓рди рдкреНрд░рдХрд╛рд░ ( рдПрдЪ: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ рдкреНрд░рдХрд╛рд░ ред рдПрдЪрдПрд╕ , рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА :
[ реи рдХрд╛ реи ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
рдареАрдХ рд╣реИ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдП рдЧрдП: рдореБрдЦреНрдп , рдкреНрд░рдХрд╛рд░ ред
* рдореБрдЦреНрдп рдпрд╛
рд╣рдордиреЗ рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рдордиреЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛, рдФрд░ рдХреЛрдб рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрди рдЧрдпрд╛ред рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдП, рдФрд░ рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рд╕рдордЧреНрд░ рд░рдЪрдирд╛рдХрд╛рд░ рдХреЗ рд╕рд╛рде рднреА рдЖрдПред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо! рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрд░рд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬреНрдЮрд╛рди рдХреЛ рдордЬрдмреВрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред
1. GameAction.hs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ GameAction рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ рдФрд░ Main рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореБрдЦреНрдп рд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд░рди рдХрд░реЗрдВред
2. рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ) рддреЛ рд▓рд╛рдИрдЯ рдХрдорд╛рдВрдб рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреНрд╡рд┐рдЯ, рдЧреЛ dir рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИред рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ "(рд╡рд░реНрдгрди рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ)" рддрд╛рдХрд┐ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
3. рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдирдИ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдирдпрд╛ рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ ред
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛, рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
рдЧреНрд░реАрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред