рд╣рд╛рд╕реНрдХреЗрд▓ рдХреНрд╡реЗрд╕реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рдЧреНрд▓реЗрдб

рдХреНрд▓рд┐рдпрд░рд┐рдВрдЧ
рдЖрдк рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд╡рди рдкрде рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдорд╛рд╢реЛрдзрди рдореЗрдВ рд╣реИрдВ рдЬреЛ рдкреВрд░реНрд╡ рдФрд░ рдкрд╢реНрдЪрд┐рдо рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред


рд╕рд╛рдордЧреНрд░реА:
рдЧреНрд░реАрдЯрд┐рдВрдЧ
рднрд╛рдЧ 1 - рдЖрдЧреЗ
рднрд╛рдЧ 2 - рд╡рди
рднрд╛рдЧ 3 - рдкреЛрд▓реАрдирд╛
рднрд╛рдЧ 4 - рдШрд╛рдЯреА рдХрд╛ рджреГрд╢реНрдп
рднрд╛рдЧ 5 - рд╣реЙрд▓

рднрд╛рдЧ рей
рдЬрд┐рд╕рдореЗрдВ рд╣рдо ADT рдХреЗ рд╕рд╛рде рдЬрд╛рджреВ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рд╢реЛ рдФрд░ рд░реАрдб рдореИрдЬрд┐рдХ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдордиреЗ рддреАрди рдмреАрдЬреАрдп рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдП - рд╕реНрдерд╛рди, рджрд┐рд╢рд╛, рдХрд╛рд░реНрдпред рдореИрдВрдиреЗ рдПрдЯреАрдбреА рдХреЗ рдЬрд╛рджреВ рдФрд░ рдЕрджреНрднреБрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХрд╣рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдмрд╕ Eq рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "==" рдФрд░ "/ =" рдСрдкрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдЕрдм ...

рдХреНрдпрд╛ рдЖрдк рдЪрдорддреНрдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЦреИрд░ ... рдЪрд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓реЛрдХреЗрд╢рди рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ:

рдбреЗрдЯрд╛ рд╕реНрдерд╛рди =
рдШрд░
| Friend'sYard
| рдЙрджреНрдпрд╛рди
| OtherRoom - рдПрдХ рдирдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рд╡реНрдпреБрддреНрдкрдиреНрди ( рдЗрдХ )

* рдореБрдЦреНрдп - рдШрд░ / = рджреЛрд╕реНрдд рдХреА рд╢рд╛рджреА
рдпрд╣ рд╕рдЪ рд╣реИ
* рдореБрдЦреНрдп : рдШрд░ == рдЕрдиреНрдпрд░реБрдо
рдЭреВрдард╛


рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛! рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдПрдХ рд╢реЛ рдлрдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

* рдореБрдЦреНрдп: рдШрд░ рджрд┐рдЦрд╛рдУ

< рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ > : 1 : 1 :
рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ ( рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдПрдБ )
' рд╢реЛ ' рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди
рд╕рдВрднрд╡ рдлрд┐рдХреНрд╕: рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдШреЛрд╖рдгрд╛ рдЬреЛрдбрд╝реЗрдВ ( рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдПрдБ )
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ: рд╣реЛрдо рджрд┐рдЦрд╛рдПрдВ
'рдЗрдЯ' рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореАрдХрд░рдг рдореЗрдВ: рдпрд╣ = рд╣реЛрдо рджрд┐рдЦрд╛рдУ


рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ ... рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рд╣рдордиреЗ рджреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдШрд┐рд╕реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдордиреЗ рд╕реНрдерд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди (Eq) рд╡рд░реНрддрдиреА рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рд╣рдореЗрдВ "рдлрд╝реИрдХреНрдЯрд░реА" рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди "==" рдорд┐рд▓рд╛ред рдХреНрдпрд╛ рд╣рдо рд╢реЛ рдлрдВрдХреНрд╢рди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдпрд╣ рд╢реЛ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

рдбреЗрдЯрд╛ рд╕реНрдерд╛рди =
рдШрд░
| Friend'sYard
| рдЙрджреНрдпрд╛рди
| OtherRoom
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рджрд┐рдЦрд╛рдПрдБ )

* рдореБрдЦреНрдп: рдЖрд░
[ рез рдХрд╛ рез ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
рдареАрдХ рд╣реИ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдП рдЧрдП: рдореБрдЦреНрдп ред

* рдореБрдЦреНрдп : рдШрд░ рджрд┐рдЦрд╛рдУ
┬лрд╣реЛрдо┬╗
* рдореБрдЦреНрдп : "рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХрд╛ рдирд╛рдо:" ++ рд╢реЛ рд╣реЛрдо ++ "ред"
"рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХрд╛ рдирд╛рдо: рд╣реЛрдоред"
* рдореБрдЦреНрдп : рдлреНрд░реЗрдВрдбреНрд╕ рд╡рд╛рдпрд░реНрдб рджрд┐рдЦрд╛рдУ
┬лFriend'sYard┬╗


рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдУрд╣, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗред рдЪрд▓рд┐рдП рдЕрдм рдбрд┐рд╕реНрдХреНрд░рд┐рдорд┐рдиреЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдо рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (" рдЕрдиреНрдпрдерд╛ "):

рд╡рд░реНрдгрди рд╡рд░реНрдгрди :: рд╕реНрдерд╛рди -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
рд╡рд░реНрдгрди рд╕реНрдерд╛рди = рдХреЗрд╕ рдХрд╛ рд╕реНрдерд╛рди
рдШрд░ -> "рдЖрдк рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдорд┐рддреНрд░ рдХрд╛ рд╡рд╛рдпрд░реНрдб -> "рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЫреЛрдЯреЗ рдмрд╛рдбрд╝ рдХреЗ рдкреАрдЫреЗ рд░рд╛рдд рдХреЗ рдмрдЧреАрдЪреЗ рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдЧрд╛рд░реНрдбрди -> "рдЖрдк рдмрдЧреАрдЪреЗ рдореЗрдВ рд╣реИрдВред рдЧрд╛рд░реНрдбрди рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ: рд╕рд╛рдл, рдкрддрд▓рд╛, рдардВрдбрд╛ рдФрд░ рдЧреАрд▓рд╛ред "
рдЕрдиреНрдпрдерд╛ -> "" ++ рд╢реЛ рд▓реЛрдХ ++ " рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ред"


рдФрд░ рдЕрдм, ghci рдХреА рдорджрдж рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛, рдореБрдЭреЗ рдмрддрд╛рдУ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк "рдбрд┐рд╕реНрдЯреНрд░реЛрдХреЗрд╢рди рдЕрдиреНрдпрд░реВрдо" рдХрд╣рддреЗ рд╣реИрдВ? рдЯреНрд░реИрдХ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ OtherRoom рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдХреЗрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХреЛ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ред рд╣реЛ рдЧрдпрд╛ рдХреНрдпрд╛? рдЦреБрдж рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди рдЕрдиреНрдп
"рдЕрдиреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред"


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рддреБрдореНрд╣рд╛рд░реЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ; рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рд╕рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЦреБрдж рдкрд░ рдЧрд░реНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдиреЗ рдХреЗрд╡рд▓ рд╢реЛ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╢реЛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдпрд╛ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╕реБрдВрджрд░ рд╣реИ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╣рд╛рдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++ рдореЗрдВ, рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ ...

рд╢реЛ рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдПрдХреНрд╢рди рдФрд░ рдбрд╛рдпрд░реЗрдХреНрд╢рди рдЯрд╛рдЗрдк рдЗрдирд╣реЗрд░рд┐рдЯ рд╢реЛ рдХреНрд▓рд╛рд╕ рд╕реЗ ред рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдБ рдХрд┐ рдЖрдк рд╣рд╛рд░реЗрдВрдЧреЗ рдирд╣реАрдВ!

рдЯрд╛рдЗрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреИрд╕реЗ рд╣реЛрдо, рдлреНрд░реЗрдВрдбреНрд╕ рд╡рд╛рдпрд░реНрдб, рдпрд╛ рдЧрд╛рд░реНрдбрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ, рдлрд┐рд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред "рд╣реЛрдо рдЯрд╛рдЗрдк рдХрд░реЗрдВ" рдХрдорд╛рдВрдб рдХреНрдпрд╛ рджреЗрдЧрд╛? рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ, рд╡рд╛рдЯрд╕рдиред

* рдореБрдЦреНрдп: рдЯрд╛рдЗрдк рд╣реЛрдо
рдШрд░ :: рд╕реНрдерд╛рди


рддреБрдореНрд╣реЗрдВ рдкрддрд╛ рд╣реИ, рдХреБрдЫ рдореБрдЭреЗ рдпрд╣рд╛рдБ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬрд╝реЛрд░реНрдХ рдХреЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ: рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдХрд╛ рдирд╛рдо рд╡рд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░, рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐, рдПрдХ рд╡рд┐рд╡рд░рдг рд╕реЗред рдЖрдЗрдП рд╡рд░реНрдгрди рд╡рд░реНрдгрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ ... рд╣рд╛рдБ, рд╣рд╛рдБ, рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рд▓рд╛рдк рди рдХрд░реЗрдВ! .. рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдХрд╛ рдирд╛рдо рджрд┐рдЦрд╛рдИ рджреЗред рд╕рдорд╛рдзрд╛рди "рдорд╛рдереЗ рдкрд░": рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдерд╛рди рдХрд╛ рдирд╛рдо рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рд╣реИред

рд╡рд░реНрдгрди рд╕реНрдерд╛рди = рдХреЗрд╕ рдХрд╛ рд╕реНрдерд╛рди
рдШрд░ -> "рдШрд░ \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдорд┐рддреНрд░ рдХрд╛ рд╡рд╛рдпрд░реНрдб -> "рдорд┐рддреНрд░ рдХрд╛ рд╡рд╛рдпрд░реНрдб \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЫреЛрдЯреЗ рдмрд╛рдбрд╝ рдХреЗ рдкреАрдЫреЗ рд░рд╛рдд рдХреЗ рдмрдЧреАрдЪреЗ рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдЧрд╛рд░реНрдбрди -> "рдЧрд╛рд░реНрдбрди \ n рдЖрдк рдмрдЧреАрдЪреЗ рдореЗрдВ рд╣реИрдВред рдЧрд╛рд░реНрдбрди рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ: рд╕рд╛рдл, рдкрддрд▓рд╛, рдардВрдбрд╛ рдФрд░ рдЧреАрд▓рд╛ред "
рдЕрдиреНрдпрдерд╛ -> "" ++ рд╢реЛ рд▓реЛрдХ ++ " рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ред"


рдмреЗрд╢рдХ, рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЧрд▓рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ред рдореБрдЭреЗ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ рджреЛ:

рд╡рд░реНрдгрди рд╕реНрдерд╛рди = рдХреЗрд╕ рдХрд╛ рд╕реНрдерд╛рди
рд╣реЛрдо -> рд╢реЛ рд▓реЛрдХ ++ " \ n " ++ "рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдорд┐рддреНрд░ рдХрд╛ рд╡рд╛рдпрд░реНрдб -> рд╢реЛ рд▓реЛрдХ ++ " \ n " ++ "рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЫреЛрдЯреЗ рдмрд╛рдбрд╝ рдХреЗ рдкреАрдЫреЗ рдирд╛рдЗрдЯ рдЧрд╛рд░реНрдбрди рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдЧрд╛рд░реНрдбрди -> рд╢реЛ рд▓реЛрдХ ++ " \ n " ++ "рдЖрдк рдЧрд╛рд░реНрдбрди рдореЗрдВ рд╣реИрдВред рдЧрд╛рд░реНрдбрди рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ: рд╕рд╛рдл, рдкрддрд▓рд╛, рдардВрдбрд╛ рдФрд░ рдЧреАрд▓рд╛ред "
рдЕрдиреНрдпрдерд╛ -> "" ++ рд╢реЛ рд▓реЛрдХ ++ " рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ред"


рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрди рд╕рднреА рдкреНрд▓рд╕рд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдЬреЛрдбрд╝реЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ ... рдФрд░ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдЦрд░рд╛рдм рд╕реНрд╡рд╛рдж ... рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ! рдЕрдкрдиреЗ рд╣рд╛рде рджреЗрдЦреЛ:

рд╡рд░реНрдгрди рд╕реНрдерд╛рди рд╕реНрдерд╛рди = рд╢реЛ рд▓реЛрдХ ++ " \ n " ++
рдХрд╛ рдорд╛рдорд▓рд╛ рд╕реНрдерд╛рди
рдШрд░ -> "рдЖрдк рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдорд┐рддреНрд░ рдХрд╛ рд╡рд╛рдпрд░реНрдб -> "рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЫреЛрдЯреЗ рдмрд╛рдбрд╝ рдХреЗ рдкреАрдЫреЗ рд░рд╛рдд рдХреЗ рдмрдЧреАрдЪреЗ рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реИрдВред"
рдЧрд╛рд░реНрдбрди -> "рдЖрдк рдмрдЧреАрдЪреЗ рдореЗрдВ рд╣реИрдВред рдЧрд╛рд░реНрдбрди рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ: рд╕рд╛рдл, рдкрддрд▓рд╛, рдардВрдбрд╛ рдФрд░ рдЧреАрд▓рд╛ред "
рдЕрдиреНрдпрдерд╛ -> "" ++ рд╢реЛ рд▓реЛрдХ ++ " рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ред"


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

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди рдШрд░
"рд╣реЛрдо \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"
* рдореБрдЦреНрдп : putStrLn ( рд╣реЛрдо рд╡рд░реНрдгрди рдХрд░реЗрдВ )
рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред


рдХреЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 2 рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдХреБрдЫ x рдФрд░ a рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

  |  ln (abs (sin (x))) рдпрджрд┐ x> 5
 рдп = |  x ^ 2 + a ^ 2 рдпрджрд┐ x <= 5 рдФрд░ рдПрдХ <= 3
     |  x / a + 7.8 * a if x <= 5 рдФрд░ a> 3 


рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЧрдгрд┐рдд рдореЗрдВ рдРрд╕рд╛ рдЕрдВрдзреЗрд░рд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░-рдФрд░-рдпрд╛ рдорд╛рдорд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

y x a = рдпрджрд┐ x > 5
рдлрд┐рд░ рд▓реЙрдЧ ( рдкреЗрдЯ ( рдкрд╛рдк ( x ) ) )
рдЕрдиреНрдпрдерд╛
рдпрджрд┐ x <= 5 рдФрд░& a <= 3
рддрдм x ^ 2 + a ^ 2
рдФрд░ рдПрдХреНрд╕ / рдП + 7.8 * рдП

y 'x a = case x > 5 рдХрд╛
рд╕рддреНрдп -> рд▓реЙрдЧ ( рдкреЗрдЯ ( рдкрд╛рдк ( x ) ) )
рдЧрд▓рдд -> рдорд╛рдорд▓рд╛ x <= 5 рдФрд░& a <= 3 рдХрд╛
рд╕рдЪ -> x ^ 2 + a ^ 2
рдорд┐рдереНрдпрд╛ -> x / a + 7.8 * a


рдХрдИ рд╕реНрддрд░реЛрдВ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдХрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдФрд░ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ? .. рдЦреИрд░, рдРрд╕рд╛ рдХреИрд╕реЗ! рд╕реБрд░рдХреНрд╖рд╛ рднрд╛рд╡! рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рджреЗрдЦреЗрдВ:

y '' x a | x > 5 = рд▓реЙрдЧ ( рдкреЗрдЯ ( рдкрд╛рдк ( x ) ) )
y '' x a | x <= 5 рдФрд░& a <= 3 = x ^ 2 + a ^ 2
y '' x a | рдЕрдиреНрдпрдерд╛ = x / a + 7.8 * a

- рдпрд╛ рдПрдХ рд╣реА рдмрд╛рдд:

y '' x a | x > 5 = рд▓реЙрдЧ ( рдкреЗрдЯ ( рдкрд╛рдк ( x ) ) )
| x <= 5 рдФрд░& a <= 3 = x ^ 2 + a ^ 2
| рдЕрдиреНрдпрдерд╛ = x / a + 7.8 * a


рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди "рд▓реЙрдЧ (рдкреЗрдЯ (рдкрд╛рдк (x)))) рд▓реЗрддрд╛ рд╣реИ" рдпрджрд┐ x рдкрд╛рдБрдЪ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдПрдХ рдЧрд╛рд░реНрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдХреЗ рдмреАрдЪ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ" | рдФрд░ "="ред рд╕реБрд░рдХреНрд╖рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд╣реА рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╕-рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ: рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╕реЗрдЯ рдкреВрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЦреЗрд▓ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЧрдПред рдХрд┐рд╕реА рднреА рдЦреЗрд▓ рдореЗрдВ, рдПрдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕, рднреМрддрд┐рдХреА рдФрд░ AI рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдорд╛рд░рд╛ рдЦреЗрд▓ рдЖрд╕рд╛рди рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реЛрдЧрд╛:

0. рд╣рдо рдЦреЗрд▓ рдХреЗ рдорд╛рд╣реМрд▓ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ:
- рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ;
- рд╕реНрдерд╛рди рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
1. рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреАрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
2. рдЯреАрдо рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ред
3 рдПред рдпрджрд┐ рдХрдорд╛рдВрдб рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ:
- рдпрд╣ рдкреНрд░рджрд░реНрд╢рди;
- рд╣рдо рдмрд┐рдВрджреБ 0 рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
3 рдмреАред рдпрджрд┐ рдХрдорд╛рдВрдб рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ:
- рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд░реЗрдВ;
- рд╣рдо рдмрд┐рдВрджреБ 1 рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред

рд╣рд╛рдл рдкреЙрдЗрдВрдЯ 0 рддреИрдпрд╛рд░ рд╣реИ: рдпрд╣ "рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рдирд▓рд╛рд╕реНрдЯ" рдлрдВрдХреНрд╢рди рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рддреЛ, рдЪрд░рдг 1 рдкрд░ рдЬрд╛рдПрдВред рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдкреБрдЯрд╕реНрдЯреНрд░реЙрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рд╡рд┐рдкрд░реАрдд рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ - рдЧреЗрдЯрд▓рд╛рдЗрдиред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдордВрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рджреМрдбрд╝рдирд╛ =
рдХрд░рдирд╛
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn x


рдпрд╣ рдХреМрд╢рд▓ "рд╕рд╛рдХреНрд╖рд░рддрд╛" рдФрд░ "рдИрдЧрд▓ рдЖрдИ" рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ! рд░рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдХреБрдЫ рд╕рд░рд▓ рдХрджрдоред рд╣рдо рдХреАрдмреЛрд░реНрдб (рдЧреЗрдЯрд▓рд╛рдЗрди) рд╕реЗ рдПрдХ рд▓рд╛рдЗрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдпрд╣ рд░реЗрдЦрд╛ x рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ; рдЕрд╕рд▓реА рдХрдВрд╕реЛрд▓ рдореЗрдВ x рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, "рдбреВ" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рд╛рд╕реНрдХреЗрд▓ рднрд╛рд╖рд╛ рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ред рдФрд░ рдЕрдм рд╣рдо рдЕрдиреБрднрд╡ рдХрд░реЗрдВрдЧреЗ:

* рдореБрдЦреНрдп : рд░рди
рдирдорд╕реНрдХрд╛рд░ ! - рдореИрдВрдиреЗ рдХреНрдпрд╛ рдкрд░рд┐рдЪрдп рджрд┐рдпрд╛
рдирдорд╕реНрдХрд╛рд░ ! - рдХреНрдпрд╛ putStrLn рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
* рдореБрдЦреНрдп : рд░рди
kjljfs
kjljfs


рдПрдХ рдмрд╛рд░ рдлрд┐рд░: getLine рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ x рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, putStrLn рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд┐рдВрдЯ xред рдЪрд▓реЛ рд▓рд╛рдЗрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ "рдПрдВрдЯрд░ рдХрдорд╛рдВрдб:" рдкреНрд░реЙрдореНрдкреНрдЯ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рджреЗрдВ рдХрд┐ рд╡реЗ рдЙрд╕рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рджреМрдбрд╝рдирд╛ = рдХрд░рдирд╛
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn x

* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рджреЗрдЦреЛ


рдореИрдВрдиреЗ putStr рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдпрд╣ рдХреБрдЫ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд░реНрд╕рд░ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд╛рд╕реНрдХрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рд╕рд╛рджреГрд╢реНрдп рд╣реИ: writeLn <=> putStrLn, <=> StStr рд▓рд┐рдЦреЗрдВред

рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ "x рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз" рд▓рд┐рдЦрд╛ рдерд╛, рди рдХрд┐ "x рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ"ред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХреЛрдИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рддреАрд░ ("<-") рд╡рд╣рд╛рдВ рдЦрдбрд╝рд╛ рд╣реИ, рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рд╛рдЗрди ("=", ": =") рдирд╣реАрдВ рд╣реИред рддреАрд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╡рд┐рдирд┐рдпреЛрдЧ рдФрд░ рдмрдВрдзрди рдХреЗ рдмреАрдЪ рджреВрд░рдЧрд╛рдореА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╣рдо рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╣рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред


рдЕрдм рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХреА рдЧрдИ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп "рдЗрд╡реИрд▓реНрдпреВрдПрд╢рди" рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд░рди рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:

evalAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
evalAction strAct = "рдХреНрд░рд┐рдпрд╛:" ++ strAct ++ "!"

рджреМрдбрд╝рдирд╛ = рдХрд░рдирд╛
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction x )

- рдкрд░реАрдХреНрд╖рдг:

* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
"рдХрд╛рд░реНрд░рд╡рд╛рдИ: рджреЗрдЦреЛ!"
* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЫреЛрдбрд╝реЗрдВ
"рдХрд╛рд░реНрд░рд╡рд╛рдИ: рдЫреЛрдбрд╝реЛ!"


рд╣реЛ рд╣реЛ рд╣рдорд╛рд░реЗ рдЦрд╛рд▓реА, рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдХреЗрд╡рд▓ рдЕрдм, evalAction рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдо рдХрд┐рд╕реА рднреА рдЕрдмреНрд░рдХрджрдмрд░рд╛ рдХреЛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

* рдореБрдЦреНрдп : рд░рди
рдПрдВрдЯрд░ рдХрдорд╛рдВрдб: lubaya _ abrakadabra
"рдХрд╛рд░реНрд░рд╡рд╛рдИ: lubaya_abrakadabra!"


рд╣рдореЗрдВ рдЧреБрдорд░рд╛рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Lubaya_abrakadabra рдЬреИрд╕реА рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рд╣реИ ... рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рд╕реА рддрд░рд╣ рд╡рд░реНрдгрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдпрд╣рд╛рдБ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдмрджрд▓реЗрдВ:

evalAction :: рдПрдХреНрд╢рди -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
evalAction act = "Action:" ++ рд╢реЛ рдЕрдзрд┐рдирд┐рдпрдо ++ "!"

рджреМрдбрд╝рдирд╛ = рдХрд░рдирд╛
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction x )


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ evalAction рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ: рдЖрдк рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЬрд┐рдмрд░рд┐рд╢ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рддрд░реАрдХреЗ рд╕реЗред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдереЛрдбрд╝рд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ: рдпрд╣ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

* рдореБрдЦреНрдп: рдЖрд░
[ рез рдХрд╛ рез ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )

H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 46 : 38 :
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ ' [ рдЪрд╛рд░ ] ' рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ 'рдПрдХреНрд╢рди' рдХрд╛ рдорд┐рд▓рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛
рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ : рд▓рдбрд╝рд╛рдИ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ : рд╕реНрдЯреНрд░рд┐рдВрдЧ
'рд╡рд╛рд╖реНрдкреАрдХрд░рдг' рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ , рдЕрд░реНрдерд╛рддреН 'x'
' PutStrLn ' рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ , рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ ' ( evalAction x ) '
рд╡рд┐рдлрд▓ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛: рдХреЛрдИ рдирд╣реАрдВ ред


рдЬреАрдПрдЪрд╕реАрдЖрдИ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рдирд┐рдХрд╛рд╕реА рд╕рдорд╛рд░реЛрд╣ рдПрдХ рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧред рд╣рдордиреЗ рдпрд╣рд╛рдВ рдПрдХ рдЧрд▓рддреА рдХреА: "putStrLn (evalAction x)"ред рд╣реЗ ... рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдерд╛! "

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


рд╕реНрдЯреНрд░рд┐рдВрдЧ "x" рд╕реЗ рдЯрд╛рдЗрдк рдПрдХреНрд╢рди рдХрд╛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ ConvertStringToAction рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред "рддреАрди" рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ!

ConvertStringToAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ


рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦреЗрд▓рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреНрд╡рд┐рдЯ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

ConvertStringToAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction str = рдХреЗрд╕ рд╕реНрдЯреНрд░рдЧрд▓ рдСрдлрд╝
рджреЗрдЦреЛ -> рджреЗрдЦреЛ
"рдирдпрд╛" -> рдирдпрд╛
рдЕрдиреНрдпрдерд╛ -> рдЫреЛрдбрд╝реЛ


рд░рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ evalAction рдХрд╣рддреЗ рд╕рдордп рдЗрд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣:

- рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
evalAction :: рдПрдХреНрд╢рди -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
evalAction act = "Action:" ++ рд╢реЛ рдЕрдзрд┐рдирд┐рдпрдо ++ "!"

- рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХреНрд╢рди рдореЗрдВ рдмрджрд▓реЗрдВ
ConvertStringToAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction str = рдХреЗрд╕ рд╕реНрдЯреНрд░рдЧрд▓ рдСрдлрд╝
рджреЗрдЦреЛ -> рджреЗрдЦреЛ
"рдирдпрд╛" -> рдирдпрд╛
рдЕрдиреНрдпрдерд╛ -> рдЫреЛрдбрд╝реЛ

- рд╣рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╢рди рдореЗрдВ рдмрджрд▓реЗрдВ, рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рджреМрдбрд╝рдирд╛ = рдХрд░рдирд╛
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction ( ConvertStringToAction x ) )


рдЕрдм рдЬрд╛рдВрдЪреЗрдВ:

* рдореБрдЦреНрдп: рдЖрд░
[ рез рдХрд╛ рез ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
рдареАрдХ рд╣реИ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдП рдЧрдП: рдореБрдЦреНрдп ред

* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рдХреНрд░рд┐рдпрд╛: рджреЗрдЦреЛ !
* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: dfdf
рдХреНрд░рд┐рдпрд╛: рдЫреЛрдбрд╝реЛ !


рдЦреИрд░, рдпрд╣ рдПрдХ рдЬреАрдд рд╣реИ! рдЕрдм evalAction рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╢рди рдХреЗ рд╕рд╛рдеред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди ... рдХреНрдпрд╛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╣рдо рд▓реБрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЯреАрдо рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХрд┐рддрдирд╛ рдХрд╛рдо рдмрд╛рдХреА рд░рд╣рддрд╛ рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рджрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рд▓реБрдХ, рдЧреЛ, рдЗрдиреНрд╡реЗрдВрдЯрд░реА, рдЯреЗрдХ, рдбреНрд░реЙрдк, рдЗрдирд╡реЗрд╕реНрдЯрд┐рдЧреЗрдЯ, рдХреНрд╡рд┐рдЯ, рд╕реЗрд╡, рд▓реЛрдб, рдиреНрдпреВ рдФрд░ рдЕрдиреНрдп рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпрд╛, рдлрд┐рд░ рд╕реЗ рдФрд░ рдлрд┐рд░ рд╕реЗ function -StringToAction рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ ...

рд╡реИрд╕реЗ, рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреЛрдЬрди: ConvertStringToAction рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреЛ рдФрд░ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд┐рд╡реЗрдЪрди, рдмрд┐рдирд╛ рд╡рд┐рд╡рд░рдг рдХреЗред

- рдЧрд╛рд░реНрдб рдХреЗ рднрд╛рд╡ (рдЧрд╛рд░реНрдб)
convertStringToAction ' :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction 'str | str == "рджреЗрдЦреЛ" = рджреЗрдЦреЛ
| str == "рдирдпрд╛" = рдирдпрд╛
| рдЕрдиреНрдпрдерд╛ = рдЫреЛрдбрд╝реЛ

- рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди
ConvertStringToAction '' :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction '' '' рджреЗрдЦреЛ '' = рджреЗрдЦреЗрдВ
ConvertStringToAction '' "рдирдпрд╛" = рдирдпрд╛
ConvertStringToAction '' _ = рдЫреЛрдбрд╝реЗрдВ

- gci рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
* рдореБрдЦреНрдп : ConvertStringToAction ' "рдирдпрд╛"
рдирдИ
* рдореБрдЦреНрдп : ConvertStringToAction '' "рдирдпрд╛"
рдирдИ


"рдФрд░ рдХреНрдпрд╛, рдмрд╛рд░-рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЗрд╕-рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ConvertStringToAction? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ ... "- рдирд┐рд░рд╛рд╢рд╛ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдиреЛрдЯреЛрдВ рдХреА рд╣реИ? .. рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рдЖрд▓рд╕реА рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреА рдЖрд▓рд╕реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рди рд▓рд┐рдЦреЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдФрд░ рдирд╣реАрдВ! рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ! рд╣рдо рдПрдХ рдирдпрд╛ рдордВрддреНрд░ рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ! рд░рд┐рдХреЙрд░реНрдб: "рд░реАрдб рдЯрд╛рдЗрдк рдХреНрд▓рд╛рд╕ , рдЬрд┐рд╕рдореЗрдВ рд░реАрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкрдврд╝рддрд╛ рд╣реИред" рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдПрдбреАрдЯреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рд╕реНрдерд╛рди =
рдШрд░
...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )

рдбреЗрдЯрд╛ рджрд┐рд╢рд╛ =
рдЙрддреНрддрд░
...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )

рдбреЗрдЯрд╛ рдПрдХреНрд╢рди =
рджреЗрдЦреЛ
...
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )


рдкрдврд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдШрд┐рд╕реА рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреЗрд▓реЗрдВред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрджрд╛рд╣рд░рдг:

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди рдШрд░
"рд╣реЛрдо \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди рд╡рд░реНрдгрди ( "рд╣реЛрдо" рдкрдврд╝реЗрдВ )
"рд╣реЛрдо \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"


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

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди ( рдкрдврд╝реЗрдВ ( рд╢реЛ рд╣реЛрдо ) )
"рд╣реЛрдо \ n рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред"


рд░реАрдб рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ? рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рдкрд╛рд╕ рдХреЗ рднрд╛рд╡реЛрдВ рд╕реЗ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ ("рд╣реЛрдо" рдкрдврд╝реЗрдВ) рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рд╕рдЦреНрддреА рд╕реЗ рд╕реЗрдЯ рд╣реИред рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдкреНрд░рдХрд╛рд░ рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рд╣реА рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдпрджрд┐ рдЖрдк ghci рдореЗрдВ "рд░реАрдб" рд╣реЛрдо рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рд╣рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭреЗрдЧрд╛:

* рдореБрдЦреНрдп : "рд╣реЛрдо" рдкрдврд╝реЗрдВ

< рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ > : 1 : 1 :
рдЕрдбрд╝рдЪрди рдкреНрд░рдХрд╛рд░ рдЕрд╕реНрдкрд╖реНрдЯ 'рдмрд╛рдзрд╛' рдореЗрдВ :
( рдкрдврд╝реЗрдВ 0 ) ' рдкрдврд╝ ' рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди
рд╕рдВрднрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕: рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЗрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ: "рд╣реЛрдо" рдкрдврд╝реЗрдВ
'рдЗрдЯ' рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореАрдХрд░рдг рдореЗрдВ: рдпрд╣ = "рд╣реЛрдо" рдкрдврд╝реЗрдВ


рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЙрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

* рдореБрдЦреНрдп : "рд╣реЛрдо" :: рд╕реНрдерд╛рди рдкрдврд╝реЗрдВ
рдШрд░
* рдореБрдЦреНрдп " рдкрдврд╝рд╛ " 5.5 " :: рдлреНрд▓реЛрдЯ
5.5
* рдореБрдЦреНрдп : "рдЯреНрд░реВ" :: рдмреВрд▓ рдкрдврд╝реЗрдВ


рдЬрд╛рджреВ, рд╣реИ рдирд╛? ConvertStringToAction рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реАрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред

- рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
evalAction :: рдПрдХреНрд╢рди -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
evalAction act = "Action:" ++ рд╢реЛ рдЕрдзрд┐рдирд┐рдпрдо ++ "!"

- рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХреНрд╢рди рдореЗрдВ рдмрджрд▓реЗрдВ
ConvertStringToAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction str = str рдкрдврд╝реЗрдВ

- рд╣рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╢рди рдореЗрдВ рдмрджрд▓реЗрдВ, рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рджреМрдбрд╝рдирд╛ = рдХрд░рдирд╛
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
putStrLn ( evalAction ( ConvertStringToAction x ) )

- gci рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рджреЗрдЦреЛ
рдХреНрд░рд┐рдпрд╛: рджреЗрдЦреЛ !
* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЫреЛрдбрд╝реЗрдВ
рдХреНрд░рд┐рдпрд╛: рдЫреЛрдбрд╝реЛ !


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд░реАрдб рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ: рдпрджрд┐ рд╣рдо рдЕрдмреНрд░рдХрджрдмрд░рд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЕрдмрд░рдХрджрдмрд░рд╛
рдХреНрд░рд┐рдпрд╛: *** рдЕрдкрд╡рд╛рдж: рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ ред рдкрдврд╝реЗ : рдирд╣реАрдВ


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

ConvertStringToAction :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдХрд╛рд░реНрд░рд╡рд╛рдИ
ConvertStringToAction str = рдХреЗрд╕ рдХреЗ рддрд╛рд░ рдкрдврд╝рддрд╛ рд╣реИ
[ ( x , _ ) ] -> x
_ -> рдЫреЛрдбрд╝реЛ

* рдореБрдЦреНрдп : рд░рди
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЕрдмрд░рдХрджрдмрд░рд╛
рдХреНрд░рд┐рдпрд╛: рдЫреЛрдбрд╝реЛ !


рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред

1. рдЦреЛрдЬ рдХреА рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЬрд╛рдВрдЪ рдХрд╛рд░реНрд░рд╡рд╛рдИред
- ADT "рдСрдмреНрдЬреЗрдХреНрдЯ" рдмрдирд╛рдПрдВ, рд╡рд╣рд╛рдВ рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдЬреЛрдбрд╝реЗрдВред
- рдПрдХ рдлрдВрдХреНрд╢рди DescriptionObject рдмрдирд╛рдПрдБ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИред
- рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд╛рдВрдЪ рдмрдирд╛рдПрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

2. рдХрд╛рд░реНрдпрдХреНрд░рдо "рдЧреВрдВрдЧрд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░"ред
рдкреВрд░реНрдгрд╛рдВрдХ рдСрдкрд░реЗрд╢рди "рдЬреЛрдбрд╝реЗрдВ", "рдШрдЯрд╛рдирд╛" рдФрд░ "рдЧреБрдгрд╛ рдХрд░реЗрдВ" рд╣реИрдВред
рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ 1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдлрд┐рд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдлрд┐рд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ 2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрдм рдпрд╣ рд╕рдм рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛, рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЧреНрд░реАрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ

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


All Articles