OCaml рдХрд╛ рдкрд░рд┐рдЪрдп: OCaml рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ [2]

[рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж: рдЕрдиреБрд╡рд╛рдж рдЬрд╛рд░реА рд░рд╣рд╛, рдпрд╣рд╛рдБ рдкрд╣рд▓рд╛ рд▓реЗрдЦ]

OCaml рдкрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЯреАрдЬрд╝рд░

OCaml рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рдВрд░рдЪрдирд╛



рдЕрдм рд╣рдо OCaml рдкрд░ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдереЛрдбрд╝рд╛ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдВрддрд░ ;;



рдФрд░ ;



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



рд╕реНрдерд╛рдиреАрдп "рдЪрд░" (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐)



рд╕реА рдореЗрдВ рд╣рдорд╛рд░реЗ average



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдЬреЛрдбрд╝реЗрдВ (рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ)ред



 рдбрдмрд▓ рдФрд╕рдд (рдбрдмрд▓ рдП, рдбрдмрд▓ рдмреА)
 {
   рдбрдмрд▓ рд╕рдо = рдП + рдмреА;
   рд╡рд╛рдкрд╕реА рд░рд╛рд╢рд┐ / 2;
 }


рдЕрдм рдЗрд╕реЗ OCaml рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:



 рдФрд╕рдд рдФрд╕рдд рджреЗрдВ =
   рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ = a +ред  рдмреА рдореЗрдВ
   рдпреЛрдЧ /ред  2.0 ;;


рдорд╛рдирдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ let name = expression in



рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдп рдирд╛рдо рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ name



рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ;;



, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕реНрдерд╛рдиреАрдп рдХреЛрдб рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдВрддред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рднреА рдЗрдВрдбреЗрдВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдмрд╕ рд▓реЗ let ... in



рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдмрдпрд╛рди рдерд╛ред



рдЕрдм, рдЙрдкрд░реЛрдХреНрдд рд╕реНрдерд╛рдиреАрдп рдирд╛рдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реА рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣рд╛рде рдХреА рдиреАрдВрдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИрдВред C рдХреЛрдб рдореЗрдВ рдЪрд░ sum



рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдЖрдЧреЗ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдореГрддрд┐ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред OCaml рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП sum



рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рдирд╛рдо рд╣реИ a +. b



a +. b



ред рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ sum



рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред (рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдореВрд▓реНрдп рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред



рдпрд╣рд╛рдБ рдЕрдВрддрд┐рдо рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрди рджреЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╕рдорд╛рди рдорд╛рди ((a + b) + (a + b) 2 ) рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:



 рд▓реЗрдЯ рдлреЗрдм =
   (a + bред) + рд╣реИред  (a + bред) ** реиред
   ;;


 рд▓реЗрдЯ рдлреЗрдм =
   Let x = a +ред  рдмреА рдореЗрдВ
   x +ред  x ** реиред
   ;;


рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рддреЗрдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рд▓рд┐рдП "рд╕рд╛рдорд╛рдиреНрдп рд╕рдмрдЯреЗрдХреНрд╢рдВрд╕ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ") рдирд╛рдордХ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ x



a +. b



рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯрд╛ рдирд╛рдо рд╣реИ a +. b



a +. b



ред

рд╡реИрд╢реНрд╡рд┐рдХ "рдЪрд░" (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐)



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



 рдЪрд▓реЛ html =
   рдХрдиреНрдЯреИрдВрдЯ = read_whole_file рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдВрджрд░ рдЬрд╛рдиреЗ рджреЗрдВ
   GHtml.html_from_string рд╕рд╛рдордЧреНрд░реА
   ;;

 let menu_bold () =
   рдореИрдЪ bold_button # рдХреЗ рд╕рд╛рде рд╕рдХреНрд░рд┐рдп
     рд╕рдЪ -> html # set_font_style ~ рд╕рдХреНрд╖рдо: [`рдмреЙрд▓реНрдб] ()
   |  рдЧрд▓рдд -> html # set_font_style ~ рдЕрдХреНрд╖рдо: [`BOLD] ()
   ;;

 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ рдореБрдЦреНрдп () =
   (* рдХреЛрдб рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ *)
   factory # add_item "рдХрдЯ" ~ рдХреБрдВрдЬреА: _X ~ рдХреЙрд▓рдмреИрдХ: html # рдХрдЯ
   ;;




рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИред html



- рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рдВрдкрд╛рджрди рд╡рд┐рдЬреЗрдЯ (lablgtk рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ let html =



ред рдлрд┐рд░, рдЖрдЧреЗ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ html



рдирд╛рдо рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ C рдпрд╛ рдЕрдиреНрдп рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИред " html



рдкреЙрдЗрдВрдЯрд░" рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрд╢рди рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, html



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



рдЪрд▓реЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА



let ...



рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ let ...



, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐, рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░) рдпрд╛ рдЕрдВрджрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ) рдХреЛ рдЕрдХреНрд╕рд░ рд▓реЗ-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╕рдВрджрд░реНрдн: рдЕрд╕рд▓реА рдЪрд░



рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЖрдк рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓рд┐рдВрдХ рд╕реА / рд╕реА ++ рдореЗрдВ рд╕рдВрдХреЗрдд рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн (рдкреЙрдЗрдВрдЯрд░реНрд╕) рд╣реИрдВред рдкрд░реНрд▓ рдореЗрдВ, рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рд╣реИрдВ, рдЬреИрд╕реЗ рдУрдХреЗрдореНрд▓ рдореЗрдВред



рдпрд╣рд╛рдБ рд╣рдо OCaml рдореЗрдВ рдПрдХ int



рд▓рд┐рдВрдХ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ:



 рд░реЗрдл 0 ;;


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЙрд╕реЗ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдиреЗ рд╡рд╣реАрдВ рдЖрдХрд░ рдЗрд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛! (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдЖрдЗрдП рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдВ:



 let my_ref = ref 0 ;;


рдпрд╣ рд▓рд┐рдВрдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреВрд░реЗ рд╢реВрдиреНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдм рдЗрд╕рдореЗрдВ рдПрдХ рдФрд░ рдореВрд▓реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрд╢рди):



 my_ref: = 100 ;;


рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд▓рд┐рдВрдХ рдХреНрдпрд╛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ:



 #; my_ref ;;
 - - int = 100


рддреЛ, рдСрдкрд░реЗрдЯрд░ :=



рд▓рд┐рдВрдХ :=



рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдСрдкрд░реЗрдЯрд░ !



dereferences рд▓рд┐рдВрдХ, рд╡рд╛рдкрд╕реА рд╕рд╛рдордЧреНрд░реАред рдпрд╣рд╛рдБ C / C ++ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд░реВрдб рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рддреБрд▓рдирд╛ рд╣реИ:

OCaml рд╕реА / рд╕реА ++
 let my_ref = ref 0 ;;
 my_ref: = 100 ;;  
 my_ref


 int a = 0;  int * my_ptr = & a;
 * my_ptr = 100;
 * my_ptr




рд▓рд┐рдВрдХ рдХрд╛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП let name=expression in



рдХрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рд╣реИред

рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп



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

рдПрдХ "рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди GNU C ++ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ)ред рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди 'рд╕реНрдХреНрд╡рд╛рдпрд░' рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:



 рдлреВ (рдбрдмрд▓ рдП, рдбрдмрд▓ рдмреА)
 {
   рдбрдмрд▓ рд╡рд░реНрдЧ (рдбрдмрд▓ рдЬреЗрдб) {рд░рд┐рдЯрд░реНрди рдЬреЗрдб * рдЬреЗрдб;  }

   рд╡рд╛рдкрд╕реА рд╡рд░реНрдЧ (рдП) + рд╡рд░реНрдЧ (рдмреА);
 }


рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рддрдерд╛рдХрдерд┐рдд "рд▓реЗрдХреНрд╕рд┐рдХрд▓ рджреГрд╢реНрдпрддрд╛ рдХрд╛ рдХреНрд╖реЗрддреНрд░" рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдСрдлрд╕реЗрдЯ рдирд╛рдордХ рдПрдХ рдЪрд░ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ:



 рдмрд╛рд░ (рдЗрдВрдЯ * рд╕рд░рдгреА, рдЗрдВрдЯ рдСрдлрд╕реЗрдЯ, рдЗрдВрдЯ рдЖрдХрд╛рд░)
 {
   рдЗрдВрдЯ рдПрдХреНрд╕реЗрд╕ (int * array, int index)
     {рд╡рд╛рдкрд╕реА рд╕рд░рдгреА [рд╕реВрдЪрдХрд╛рдВрдХ + рдСрдлрд╕реЗрдЯ];  }
   int i;
   / * ... * /
   рдХреЗ рд▓рд┐рдП (i = 0? рдореИрдВ <рдЖрдХрд╛рд░; рдореИрдВ ++)
     / * ... * / рдкрд╣реБрдВрдЪ (рд╕рд░рдгреА, i) / * ... * /
 }




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



 let_whole_channel рдЪрд╛рди =
   рдЪрд▓реЛ рдмрдлрд╝ = рдмрдлрд╝рд░.рдХреНрд░рд┐рдПрдЯ 4096 рдЗрди
   рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ рд▓реВрдк () =
     let newline = input_line chan in
     рдмрдлрд╝рд░ .add_string buf newline;
     рдмрдлрд╝рд░ .add_char buf '\ n';
     рдкрд╛рд╢ ()
   рдореЗрдВ
   рдХреЛрд╢рд┐рд╢
     рдкрд╛рд╢ ()
   рд╕рд╛рде
     End_of_file -> рдмрдлрд╝рд░.рдХрдВрдЯреЗрдВрдЯреНрд╕ buf ;;


рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рдмрд╛рдд рдирд╣реАрдВ рдХреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХреЗрдВрджреНрд░реАрдп рдиреЗрд╕реНрдЯреЗрдб loop



рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рдЯрд╛рдЗрдк unit



рдХрд╛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдЖрдк read_whole_channel рдлрд╝рдВрдХреНрд╢рди рд╕реЗ loop ()



рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреА рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ (рдЗрд╕ рддрд░рд╣ loop



рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ buf



рдФрд░ chan



рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓рддреА рд╣реИ)ред



рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдПрдХ рд╕реНрдерд╛рдиреАрдп рдирд╛рдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рди рд╣реИ: let name arguments = function-defenition in.







рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рдЗрдВрдбреЗрдВрдЯ рдХреА рдЬрд╛рддреА рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ)ред рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ (рддреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ) рддреЛ рдЖрдкрдХреЛ let rec



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдореЙрдбреНрдпреВрд▓ рдФрд░ open



рдХрдорд╛рдВрдб



рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдореЙрдбреНрдпреВрд▓ (рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп) OCaml рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдЦрд╛рдВрдХрди рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GUI рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдирд╛, рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдФрд░ POSIX рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдирд╛ред рдпреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп / usr / lib / ocaml / VERSION (рдпреВрдирд┐рдХреНрд╕ рдкрд░) рд╕реНрдерд┐рдд рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо Graphics



рдирд╛рдордХ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред



Graphics



рдореЙрдбреНрдпреВрд▓ рдореЗрдВ 5 рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░):



 /usr/lib/ocaml/3.08/graphics.a
 /usr/lib/ocaml/3.08/graphics.cma
 /usr/lib/ocaml/3.08/graphics.cmi
 /usr/lib/ocaml/3.08/graphics.cmxa
 /usr/lib/ocaml/3.08/graphics.mli


[рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж: рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ (рдбреЗрдмрд┐рдпрди рд╕рд┐рдб) рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реАрдзреЗ / usr / lib / ocaml рдореЗрдВ рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП]ред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ graphics.mli



рдлрд╝рд╛рдЗрд▓ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд╛рдо Graphics.mli



, Graphics.mli



рдирд╣реАрдВред OCaml рд╣рдореЗрд╢рд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛ рдХреИрдкрд┐рдЯрд▓ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЖрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рди рд╣реЛред



рдпрджрд┐ рд╣рдо Graphics



рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдпрд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдПрдХ open Graphics;;



рдШреЛрд╖рдгрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ open Graphics;;



, рдпрд╛ рд╣рдо рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЙрд▓ рдХреЛ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ: Graphics.open_graph.open



ред open



рдЬрд╛рд╡рд╛ рдореЗрдВ import



рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдкрд░реНрд▓ рдореЗрдВ use



рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ (рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)ред



[рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП: рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╢реАрд░реНрд╖ рд╕реНрддрд░ (toplevel) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ: ocamlmktop -o ocaml- рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ред]



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ)ред рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ open_graph



, рджреВрд╕рд░рд╛ рдХреЙрд▓ Graphics.open_graph



ред [рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред: рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИрдВ]ред



 (* рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: ocamlc graphics.cma grtest1.ml -o grtest1 *)

 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЦреЛрд▓реЗрдВ ;;

 рдУрдкрди_рдЧреНрд░рд╛рдл "640x480" ;;
 рдХреЗ рд▓рд┐рдП рдореИрдВ = 12 рдбрд╛рдЙрдЯ 1 рдХрд░рддреЗ рд╣реИрдВ
   рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ рддреНрд░рд┐рдЬреНрдпрд╛ = рдореИрдВ * 20 рдореЗрдВ
   set_color (рдпрджрд┐ (i mod 2) = 0 рддреЛ рд▓рд╛рд▓ рдФрд░ рдкреАрд▓рд╛);
   fill_circle 320 240 рддреНрд░рд┐рдЬреНрдпрд╛
 рдХрд┐рдпрд╛ ;;
 read_line () ;;







 (* рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: ocamlc graphics.cma grtest2.ml -o grtest2 *)

 рд░реИрдВрдбрдоред рд╕реНрд╡рдВрдп_рдирд┐рдд () ;;
 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕.рдУрдкрди_рдЧреНрд░рд╛рдл "640x480" ;;

 рдЖрдЗрдП рдкреБрди: рдЗрдЯрд░реНрд░реЗрдЯ рдЖрд░ x_init i =
         рдЕрдЧрд░ рдореИрдВ = 1 рддреЛ x_init
         рдЕрдиреНрдпрдерд╛
                 let x = iterate r x_init (i-1) in
                 рдЖрд░ *ред  x *ред  (1.0 - рдПрдХреНрд╕) ;;

 x = 0 рд╕реЗ 639 рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
         рдЪрд▓реЛ r = 4.0 *ред  (float_of_int x) /ред  640.0 рдореЗрдВ
         i = 0 рд╕реЗ 39 рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_init = random.float 1.0 рдЗрди
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_final = iterate r x_init 500 рдореЗрдВ
                 let y = int_of_float (x_final *ред 480.) рдореЗрдВ
                 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ред Xoty
         рдХрд┐рдпрд╛
 рдХрд┐рдпрд╛ ;;

 read_line () ;;


рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рднрд╛рд╖рд╛ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рдмрд╛рдд рдирд╣реАрдВ рдХреА рд╣реИ: рд▓реВрдк рдХреЗ for



рдЬрд░реВрд░реА, if-then-else



рдмреНрд▓реЙрдХ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред рд╣рдо рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдк рдЕрднреА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: (1) рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (2) рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

Pervasives



рдореЙрдбреНрдпреВрд▓



рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ "рдУрдкрди" рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ Pervasives



рдореЙрдбреНрдпреВрд▓ (/usr/lib/ocaml/3.08/pervasives.mli [рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ /usr/lib/ocaml/pervasives.mli рд╣реИ)ред Pervasives



рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рд╡рд░реНрдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА OCaml рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ



рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк Graphics



рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╣рд░ рдмрд╛рд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╣реИрдВ? рдмрд╕ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ:



 рдореЙрдбреНрдпреВрд▓ рдЬреАрдЖрд░ = рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ ;;

 Gr.open_graph "640x480" ;;
 Gr.fill_circle 320 240 240 ;;
 read_line () ;;


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рддрдХрдиреАрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдореЙрдбреНрдпреВрд▓ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЖрдк рд╣рд░ рдмрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдХрдм рдЫреЛрдбрд╝реЗрдВ ;;



рдФрд░ ;





рдЕрдм рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ;;



рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ;



, рдФрд░ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХрдм рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЯреНрд░рд┐рдХреА рдкреНрд░рд╢реНрди рддрдм рддрдХ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рд▓реЗрддреЗред рд╡рд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдФрд░ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЪрд┐рдВрддрд┐рдд рдереЗ, рдЬрдмрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ OCaml рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдерд╛ред



рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 1 - рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ;;



рдЕрдкрдиреЗ рдХреЛрдб (рд╢реАрд░реНрд╖-рд╕реНрддрд░) рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдпрд╛рдиреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрднреА рдирд╣реАрдВ ред



рдЬрдм рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:



 рд░реИрдВрдбрдоред рд╕реНрд╡рдВрдп_рдирд┐рдд () ;;
 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕.рдУрдкрди_рдЧреНрд░рд╛рдл "640x480" ;;

 рдЖрдЗрдП рдкреБрди: рдЗрдЯрд░реНрд░реЗрдЯ рдЖрд░ x_init i =
         рдЕрдЧрд░ рдореИрдВ = 1 рддреЛ x_init
         рдЕрдиреНрдпрдерд╛
                 let x = iterate r x_init (i-1) in
                 рдЖрд░ *ред  x *ред  (1.0 - рдПрдХреНрд╕) ;;




рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╣рдорд╛рд░реЗ рджреЛ рдХрдерди рд╣реИрдВ рдФрд░ iterate



рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ ;;



ред



рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 2 - рдХрднреА - рдХрднреА рдЖрдк рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ;;



ред рдПрдХ рдирд╡рдЬрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрд╢рд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП ;;



рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 1 рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдиреБрд╕рд╛рд░ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрднреА-рдХрднреА рдПрдХ рдХрдореА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ ;;



ред рд╕реНрдерд╛рди рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ;;



:



рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╣реИ ;;



рдЬрд╣рд╛рдБ рднреА рд╕рдВрднрд╡ рд╣реЛ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛:



 рдЦреБрд▓рд╛ рд░реИрдВрдбрдо (* ;; *)
 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЦреЛрд▓реЗрдВ ;;

 self_init () ;;
 open_graph "640x480" (* ;; *)

 рдЖрдЗрдП рдкреБрди: рдЗрдЯрд░реНрд░реЗрдЯ рдЖрд░ x_init i =
         рдЕрдЧрд░ рдореИрдВ = 1 рддреЛ x_init
         рдЕрдиреНрдпрдерд╛
                 let x = iterate r x_init (i-1) in
                 рдЖрд░ *ред  x *ред  (1.0 - рдПрдХреНрд╕) ;;

 x = 0 рд╕реЗ 639 рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
         рдЪрд▓реЛ r = 4.0 *ред  (float_of_int x) /ред  640.0 рдореЗрдВ
         i = 0 рд╕реЗ 39 рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_init = random.float 1.0 рдЗрди
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_final = iterate r x_init 500 рдореЗрдВ
                 let y = int_of_float (x_final *ред 480.) рдореЗрдВ
                 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ред Xoty
         рдХрд┐рдпрд╛
 рдХрд┐рдпрд╛ ;;

 read_line () (*; * *)


рдирд┐рдпрдо рдирдВрдмрд░ 3 рдФрд░ рдирдВрдмрд░ 4 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ ;



ред рд╡реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ ;;



ред рдПрдХ рдПрдХрд▓ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо (;) рдХреЛ рдЕрдиреБрдХреНрд░рдо рдмрд┐рдВрджреБ [рд▓рдЧрднрдЧ] рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдиреБрд╡рд╛рдж: рдореБрдЭреЗ рдЕрдиреБрдХреНрд░рдо рдмрд┐рдВрджреБ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ], рдЬреЛ рд╕реА, рд╕реА ++, рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд░реНрд▓ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рдорд╛рди рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ "рдЗрд╕ рдЬрдЧрд╣ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдХрд░реЗрдВ рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред" рд╢рд░реНрдд рд╣реИ рдХрд┐ рддреБрдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ



рдирд┐рдпрдо рдирдВрдмрд░ 3: let ... in



рдмрдпрд╛рди рдореЗрдВ рдХрднреА рднреА let ... in



рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ;



рдЙрд╕рдХреЗ рдмрд╛рджред



рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 4: рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдмрдпрд╛рдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ ;



рдмрд╣реБрдд рдЕрдВрддрд┐рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ ред



рдКрдкрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХрднреА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ;



рдХреЛрдб рдореЗрдВред



         i = 0 рд╕реЗ 39 рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_init = random.float 1.0 рдЗрди
                 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x_final = iterate r x_init 500 рдореЗрдВ
                 let y = int_of_float (x_final *ред 480.) рдореЗрдВ
                 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ред Xoty
         рдХрд┐рдпрд╛


рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рд╕рдВрднрд╡ рд╣реИ ;



- рдпрд╣ рд▓рд╛рдЗрди Graphics.plot xy



, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдмреНрд▓реЙрдХ рдирдВрдмрд░ рдХреА рдЖрдЦрд┐рд░реА рд▓рд╛рдЗрди рд╣реИ, рдирд┐рдпрдо рдирдВрдмрд░ 4 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред



"рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдиреЛрдЯ?"



рдмреНрд░рд╛рдпрди рд╣рд╛рд░реНрдЯ рдиреЗ рдореБрдЭреЗ рд╕рд╣реА рдХрд┐рдпрд╛:

;



- рдПрдХ рд╣реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ ( +



)ред рдЦреИрд░, рдХрд╛рдлреА + рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ред + рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ int -> int -> int



- рдпрд╣ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ (рдЙрдирдХреА рд░рд╛рд╢рд┐) рд▓реМрдЯрд╛рддрд╛ рд╣реИред ;



рдЯрд╛рдЗрдк unit -> 'b -> 'b



- рдпрд╣ рджреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рджреВрд╕рд░рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕реАред рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╡рд┐рдкрд░реАрддред рдЖрдк a;b;c;d



рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рдЖрдк a + b + c + d



рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред



рдпрд╣ рдЙрди рдореВрд▓рднреВрдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдордЭ рднрд╛рд╖рд╛ рдХреА рд╕рдордЭ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА рдЬрд╝реЛрд░ рд╕реЗ рдирд╣реАрдВ рдмреЛрд▓реА рдЬрд╛рддреА рд╣реИ - рдУрдХреЗрдореЗрд▓ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред if/then/else



рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред a;b



рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред match foo with ...



рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИ (рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ):



  рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fxby = рдЕрдЧрд░ b рддреЛ x + y рдФрд░ x + 0
 
  рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fxby = x + (рдпрджрд┐ рдмреА рддреЛ y рдФрд░ 0)
 
  fxby = x + (рдореИрдЪ рдмреА рдХреЗ рд╕рд╛рде рд╕рдЪ -> y | рдЧрд▓рдд -> 0)
 
  fxby = x + (gz = function true -> z | false -> 0 рдХреЛ gyb рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрдВ)
 
  рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fxby = x + (let _ = y + 3 in (); рдпрджрд┐ b рддреЛ y рдФрд░ 0)


рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ - рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ;



рджреЛ рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВред OCaml рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  рдирд╛рдо [рдкреИрд░рд╛рдореАрдЯрд░] = рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐


OCaml рдореЗрдВ "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рд╡реНрдпрд╛рдкрдХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, C рдореЗрдВ "рдХрдердиреЛрдВ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рд▓реЗрдХрд┐рди C рдореЗрдВ рд╕рднреА рдХрдерди OCaml (рд╕рдВрдпреБрдХреНрдд) рдореЗрдВ рд╕рд┐рд░реНрдл рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред



рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ ;



рдФрд░ +



рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ +



рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ sum_list



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ sum_list



рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

 рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ sum_list = List.fold_left (+) 0






рд╕рднреА рдПрдХ рд╕рд╛рде: рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб



рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо labgtk 1.2 рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рджрд┐рдЦрд╛рдПрдВрдЧреЗ (Labgtk рджреЗрд╢реА Unix рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП OCaml рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ)ред рдЪреЗрддрд╛рд╡рдиреА: рдпрд╣ рдХреЛрдб рдЙрди рдЪреАрдЬреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рдмрд╛рдд рдирд╣реАрдВ рдХреА рд╣реИред рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдордд рдЬрд╛рдУ, рдХреЛрдб рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп, рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ ;;



рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ ;



рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЛрдВрдиреЗ open



рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреИрд╕реЗ рдкрд╛рда рдХреЛ рд╣рд░рд╛рдпрд╛, рдХреИрд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред



... рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╕рднреА рдЦреЛ рди рдЬрд╛рдПрдВред







рдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдВрдбрд▓ рдЦреЛрд▓рддрд╛ рд╣реИ (рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ ;;



рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреАрд╡рд░реНрдб рдЦреБрд▓реЗ рд╣реИрдВ рдпрд╛ рдЬрд╛рдиреЗ рд╣реИрдВ)ред рдпрд╣ file_dialog рдирд╛рдордХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдпрд╣ рджреЛ-рд▓рд╛рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ let sel = .. in



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ sel



рдирд╛рдордХ рдПрдХ рдирд╛рдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ let sel = .. in



ред рд╡рд╣ рддреЛ sel рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рдХрд╣рддрд╛ рд╣реИред



 (* рдкрд╣рд▓рд╛ рд╕реНрдирд┐рдкреЗрдЯ *)
 рдЦреБрд▓рд╛ рдбрдВрдбрд╛
 GMain рдЦреЛрд▓реЗрдВ

 file_dialog ~ title ~ callback? filename () = рджреЗрдВ
   Let sel =
     GWindow.file_selection ~ рд╢реАрд░реНрд╖рдХ ~ modal: true
   sel # Cancel_button # рдХрдиреЗрдХреНрдЯ # рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ ~ рдХреЙрд▓рдмреИрдХ: sel # рдирд╖реНрдЯ;
   sel # ok_button # рдХрдиреЗрдХреНрдЯ # рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реБрдЖ ~ рдХреЙрд▓рдмреИрдХ: do_ok;
   sel # рд╢реЛ ()


рджреВрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛: рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдореЛрдВ рдХреА рдмрд╕ рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреАред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ ;;



рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 2 рдХреЗ рдЕрдиреБрд╕рд╛рд░ред



 (* рджреВрд╕рд░рд╛ рд╕реНрдирд┐рдкреЗрдЯ *)

 рдЪрд▓реЛ рдЦрд┐рдбрд╝рдХреА = GWindow.window ~ рдЪреМрдбрд╝рд╛рдИ: 500 ~ рдКрдВрдЪрд╛рдИ: 300 ~ рд╢реАрд░реНрд╖рдХ: "рд╕рдВрдкрд╛рджрдХ" ()
 рдЪрд▓реЛ vbox = GPack.vbox ~ рдкреИрдХрд┐рдВрдЧ: рд╡рд┐рдВрдбреЛ # рдЬреЛрдбрд╝реЗрдВ ()

 рдореЗрдиреВрдмрд╛рд░ = GMenu.menu_bar ~ рдкреИрдХрд┐рдВрдЧ: vbox # рдкреИрдХ ()
 рдЪрд▓реЛ рдХрд╛рд░рдЦрд╛рдиреЗ = рдирдИ GMenu.fact рдореЗрдиреВрдмрд╛рд░
 let acceler_group = factory # acceler_group
 рдЪрд▓реЛ file_menu = factory # add_submenu "рдлрд╝рд╛рдЗрд▓"
 edit_menu = factory # add_submenu "рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ"

 hbox = GPack.hbox ~ рдкреИрдХрд┐рдВрдЧ: vbox # рдЬреЛрдбрд╝реЗрдВ ()
 рд╕рдВрдкрд╛рджрдХ рдХреЛ рджреЗрдВ = рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ ~ рдкреИрдХрд┐рдВрдЧ: hbox # рдЬреЛрдбрд╝реЗрдВ ()
 рд╕реНрдХреНрд░реЛрд▓рдмрд╛рд░ = GRange.scrollbar `VERTICAL ~ рдкреИрдХрд┐рдВрдЧ: hbox # рдкреИрдХ ()


рддреАрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛: рд▓реЗрдЦрдХ GdkKesyms



рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓реЗ let-binding



рдЖрддреА рд╣реИред let _ = expression



рдЕрд░реНрде рд╣реИ " let _ = expression



рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ (рд╕рднреА рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рд╣рд┐рдд), рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХреЗрдВ"ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ" рдХрд╛ рдЕрд░реНрде рд╣реИ Main.main ()



рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди, рдЬреЛ рдХрд┐ рдореБрдЦреНрдп GTK рдЪрдХреНрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИред Main.main ()



рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ "рдкрд░рд┐рдгрд╛рдо" рдорд╣рддреНрд╡рдкреВрд░реНрдг Main.main ()



рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ unit



, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА - рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЖрджреЗрд╢ред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред



 (* рддреАрд╕рд░рд╛ рд╕реНрдирд┐рдкреЗрдЯ *)

 GdkKeysyms рдЦреЛрд▓реЗрдВ

 рдЪрд▓реЛ _ =
   рдЦрд┐рдбрд╝рдХреА # рдХрдиреЗрдХреНрдЯ # рдирд╖реНрдЯ ~ рдХреЙрд▓рдмреИрдХ: Main.quit;
   рдЪрд▓реЛ рдХрд╛рд░рдЦрд╛рдиреЗ = рдирдИ GMenu.factory рдлрд╝рд╛рдЗрд▓_рдореЗрдиреВ ~ acceler_group рдореЗрдВ
   factory # add_item "рдУрдкрди ..." ~ рдХреБрдВрдЬреА: _O ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # рдУрдкрди_рдлрд╛рдЗрд▓;
   factory # add_item "рд╕рд╣реЗрдЬреЗрдВ" ~ рдХреБрдВрдЬреА: _S ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # save_file;
   factory # add_item "рдЗрд╕ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ ..." рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # save_dialog;
   рдХрд╛рд░рдЦрд╛рдирд╛ # add_separator ();
   factory # add_item "рдЫреЛрдбрд╝реЛ" ~ рдХреБрдВрдЬреА: _Q ~ рдХреЙрд▓рдмреИрдХ: рд╡рд┐рдВрдбреЛ # рдирд╖реНрдЯ;
   рдЪрд▓реЛ рдХрд╛рд░рдЦрд╛рдирд╛ = рдирдпрд╛ GMenu.factory edit_menu ~ acceler_group рдореЗрдВ
   factory # add_item "рдХреЙрдкреА" ~ рдХреБрдВрдЬреА: _C ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # copy_clipboard;
   factory # add_item "рдХрдЯ" ~ рдХреБрдВрдЬреА: _X ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # рдХрдЯ_рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб;
   factory # add_item "рдкреЗрд╕реНрдЯ" ~ рдХреБрдВрдЬреА: _V ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # рдкреЗрд╕реНрдЯ_рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб;
   рдХрд╛рд░рдЦрд╛рдирд╛ # add_separator ();
   factory # add_check_item "рд╡рд░реНрдб рд░реИрдк" ~ рд╕рдХреНрд░рд┐рдп: рдЧрд▓рдд
     ~ рдХреЙрд▓рдмреИрдХ: рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # set_word_wrap;
   factory # add_check_item "рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВ" ~ рд╕рдХреНрд░рд┐рдп: рдЧрд▓рдд
     ~ рдХреЙрд▓рдмреИрдХ: (рдлрди рдмреА -> рдПрдбрд┐рдЯрд░ # рдЯреЗрдХреНрд╕реНрдЯ # рд╕реЗрдЯ_рдПрдбрд┐рдЯреЗрдмрд▓ (рдмреА рдирд╣реАрдВ));
   window # add_accel_group acceler_group;
   рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # рдШрдЯрдирд╛ # рдХрдиреЗрдХреНрдЯ # рдмрдЯрди_рдкреНрд░реЗрд╕
     ~ рдХреЙрд▓рдмреИрдХ: (рдордЬреЗрджрд╛рд░ рдИрд╡ ->
       let рдмрдЯрди = GdkEvent.Button.button ev рдореЗрдВ
       рдпрджрд┐ рдмрдЯрди = 3 рддреЛ рд╢реБрд░реВ рдХрд░реЗрдВ
         file_menu # popup ~ рдмрдЯрди ~ рд╕рдордп: (GdkEvent.Button.time ev);  рд╕рдЪ
       рдЕрдВрдд рдореЗрдВ рдЧрд▓рдд);
   рд╕рдВрдкрд╛рджрдХ # рдкрд╛рда # set_vadjustment рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ # рд╕рдорд╛рдпреЛрдЬрди;
   рдЦрд┐рдбрд╝рдХреА # рд╢реЛ ();
   Main.main ()




[рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред: рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрдЦрддрд╛ рд╣реИ рдпрд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд╕рд╣реА рд▓рд┐рдЦрддрд╛ рд╣реИ]



All Articles