OCaml рдХрд╛ рдкрд░рд┐рдЪрдп: рдореВрд▓ рдмрд╛рддреЗрдВ [1]

(рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛: рдореИрдВ рдУрдХрд╛рдорд▓ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрда рдЧрдпрд╛, рдкрд╛рдпрд╛ рдХрд┐ рд░реВрд╕реА рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдЧрд╛рдЗрдб рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рддрд╛ рд╣реВрдВ)ред

рдореВрд▓ рдмрд╛рддреЗрдВ


рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ


OCaml рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкрд╛рддреНрд░реЛрдВ (* рдФрд░ *) рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:
(* *)

 (* рдпрд╣ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ
    рджреНрд╡рд╛рд░рд╛ рдХрдИ
    рд▓рд╛рдЗрдиреЛрдВред
 *)

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, OCaml рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ C ( /* ... */ ) рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рднреА рдПрдХ-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ #... рдкрд░реНрд▓ рдореЗрдВ рдпрд╛ // ... C99 / C ++ / Java рдореЗрдВ)ред ## ... рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рдПрдХ рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдФрд░ рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдУрдХрд╛рдорд▓реЛрд╡ рдХреЗ рдХрд╛рдорд░реЗрдб рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЪреНрдЫреЗ рд╕рдВрдкрд╛рджрдХреЛрдВ рдиреЗ рдЕрдм рднреА рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ)ред

OCaml рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдиреЗрд╕реНрдЯреЗрдб рд╣реИрдВ, рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ:
(* This code is broken ...

(* Primality test. *)
let is_prime n =
(* note to self: ask about this on the mailing lists *) XXX;;

*)

рдлрдВрдХреНрд╢рди рдХреЙрд▓


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ s, рд╕рдВрдЦреНрдпрд╛ n рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ s рд╣реЛрддрд╛ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
repeated ("hello", 3) /* this is C code */

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ "рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрд▓реЛ рд╣реИ, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдирдВрдмрд░ 3 рд╣реИ"ред

рдУрдореЗрдХреНрдПрд▓ рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ OCaml рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдЙрд╕реА рдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: repeated "hello" 3 (* this is OCaml code *) ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рддрд░реНрдХ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдХреЛрд╖реНрдардХ, рдХреЛрдИ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдирд╣реАрдВ рд╣реИрдВред

OCaml рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ repeated ("hello", 3) рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ "рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рдПрдХ рджреЛ-рддрддреНрд╡ рдЬреЛрдбрд╝реА рд╕рдВрд░рдЪрдирд╛ рд╣реИред" рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рд╕рдорд╛рд░реЛрд╣ рдПрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рджреЛ рддрд░реНрдХ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдПрдХ рдЬреЛрдбрд╝реАред рд▓реЗрдХрд┐рди, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝реЗ (рдЯреБрдкрд▓реНрд╕) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ: рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрд╖реНрдардХ рдФрд░ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЧрд▓рддреА рд╣реИред

рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди, рдкреНрд░реЙрдореНрдкреНрдЯ_рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдЖрдордВрддреНрд░рдг рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЛрд╣рд░рд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ C рдФрд░ OCaml рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ:

 / * C рдХреЛрдб: * /
 рджреЛрд╣рд░рд╛рдпрд╛ (рдкреНрд░реЙрдореНрдкреНрдЯ_рд╕реНрдЯреНрд░рд┐рдВрдЧ ("рдирд╛рдо рдХреГрдкрдпрд╛:"), 3)
 (* OCaml рдХреЛрдб: *)
 рдмрд╛рд░-рдмрд╛рд░ (рдкреНрд░реЙрдореНрдкреНрдЯ_рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдирд╛рдо рдХреГрдкрдпрд╛:") 3


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

 f 5 (g "рд╣реИрд▓реЛ") 3 (* f рдореЗрдВ рддреАрди рддрд░реНрдХ рд╣реИрдВ, g рдореЗрдВ рдПрдХ * рд╣реИ)
 f (g 3 4) (* f рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╣реИ, g рдореЗрдВ рджреЛ * рд╣реИрдВ)

 # рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ ("рд╣реИрд▓реЛ", 3) ;;  (* OCaml рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ *)
 рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ * int рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХрд╛рд░реНрдп рдХреА рдкрд░рд┐рднрд╛рд╖рд╛


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдЪрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ) рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ OCaml рдореЗрдВ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

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

 рдФрд╕рдд рдФрд╕рдд рджреЗрдВ =
   (a + bред) / рд╣реИред  2.0 ;;


рдЗрд╕реЗ OCaml рдХреЗ рдЯреЙрдкрд▓реЗрд╡рд▓ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред (рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпреВрдирд┐рдХреНрд╕ рдкрд░, рдУрд╕рдорд▓ рдЯрд╛рдЗрдк рдХрд░реЗрдВ)ред [рдиреЛрдЯред рдкреНрд░рддрд┐ред ubuntu / debian sudo рдПрдкреНрдЯреАрдЯреНрдпреВрдб рдХреЗ рд▓рд┐рдП ocaml рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, suse / centos / fedora рдХреЗ рд▓рд┐рдП - sudo yum install ocaml]ред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:
 # рдФрд╕рдд рдФрд╕рдд =
   (a + bред) / рд╣реИред  2.0 ;;
 рд╡реИрд▓ рдПрд╡рд░реЗрдЬ: рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ = <рдлрди>


рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ OCaml рдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реЛрдВрдЧреЗ:

рд╣рдо рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд┐рдореНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВ C рдореЗрдВ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ (рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛), рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдФрд╕рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ C рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

 рджреЛрд╣рд░рд╛
 рдФрд╕рдд (рдбрдмрд▓ рдбрдмрд▓ рдмреА)
 {
   рд╡рд╛рдкрд╕реА (рдП + рдмреА) / 2;
 }


OCaml рдкрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рд╣реИрдВ:

рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЬрд╡рд╛рдм рджрд┐рдП рдЧрдП рд╣реИрдВ:

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдФрд░ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдЗрд╕ рд╕рдм рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░


рдЯрд╛рдЗрдкрдореВрд▓реНрдп рд╕реАрдорд╛
рдкреВрд░реНрдгрд╛рдВрдХ32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 31-рдмрд┐рдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ 64-рдмрд┐рдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдкрд░ 63-рдмрд┐рдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ
рдирд╛рд╡рдбрдмрд▓ рд╕рдЯреАрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ (IEEE), C рдореЗрдВ рдбрдмрд▓ рдХреЗ рдмрд░рд╛рдмрд░
boolрдмреВрд▓рд┐рдпрди, рд╕рдЪ / рдЧрд▓рдд
рдЪрд╛рд░8 рдмрд┐рдЯ рдЪрд░рд┐рддреНрд░
рддрд╛рд░рдкрдВрдХреНрддрд┐


OCaml рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди (рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдВрддрд░ рдЖрдпрд╛рдо 31 рдмрд┐рдЯреНрд╕ рд╣реИ, рди рдХрд┐ 32 рдмрд┐рдЯреНрд╕ (64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП 63 рдмрд┐рдЯреНрд╕)ред рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд▓реВрдк рдореЗрдВ рдХреБрдЫ рдЧрд┐рдирддреЗ рд╣реИрдВ, рддреЛ OCaml 2. рдХреЗ рдмрдЬрд╛рдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 1 рдмрд┐рд▓рд┐рдпрди рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ int рд╕реАрдорд╛ рдХреЗ рдХрд░реАрдм рдХреБрдЫ рдЧрд┐рдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (OCaml рдореЗрдВ рдиреЗрдЯ рдФрд░ рдмрд┐рдЧ_рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, 32-рдмрд┐рдЯ рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЛрдб рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреИрдХ рдХреЛрдб) рдХреЛ nativeint рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, OCaml рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкреВрд░реНрдгрд╛рдВрдХ nativeint рдЕрдиреБрд░реВрдк рдПрдХ nativeint рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

OCaml рдореЗрдВ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЗрд╕реЗ nativeint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, OCaml рдХреЗ рдкрд╛рд╕ рдПрдХ рднреА рд╕рдЯреАрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╣реИред

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

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

unit рдкреНрд░рдХрд╛рд░ C рдореЗрдВ void рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╕реНрдкрд╖реНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмрдирд╛рдо рдирд┐рд╣рд┐рдд



рд╕реА-рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреВрд░рд╛ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк 1 + 2.5 рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рддрд░реНрдХ (рдкреВрд░реНрдгрд╛рдВрдХ) рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рднреА рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ((double)1)+2.5 рд▓рд┐рдЦрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

OCaml рдХрднреА рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ OCaml 1 + 2.5 рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдСрдкрд░реЗрдЯрд░ рдХреЛ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдПрдХ рддрд░реНрдХ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рддреЛ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ:

 # 1 + 2.5 ;;
       ^^^
 рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЯрд╛рдЗрдк рдлреНрд▓реЛрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


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

рджреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░, +. (рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ)ред

OCaml рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкрд░ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ:
 # 1 +ред  2.5 ;;
   ^
 рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ int рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдлрд╝реНрд▓реЛрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


OCaml рдЕрдм рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? (рдЙрдиреНрд╣реЗрдВ рдЪрд░ i рдФрд░ f рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП)ред OCaml рдореЗрдВ, рдПрдХ рд╕реАрдзреА рдХрд╛рд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

 (float_of_int i) +  рдПрдл ;;


float_of_int рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: int_of_float , char_of_int , int_of_char, string_of_int ред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдлреНрд▓реЛрдЯ рдореЗрдВ рдЗрдВрдЯ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ, float_of_int рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрдкрдирд╛рдо рд╣реИред рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
 рдлреНрд▓реЛрдЯ i +ред  рдПрдл ;;

(рдиреЛрдЯ, C рдХреЗ рд╡рд┐рдкрд░реАрдд, OCaml рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреНрд░рдХрд╛рд░ рджреЛрдиреЛрдВ рдХрд╛ рдПрдХ рд╣реА рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдХреМрди рд╕рд╛ рдмреЗрд╣рддрд░ рд╣реИ - рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдирд┐рд╣рд┐рдд рдХрд╛рд╕реНрдЯ?


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

рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдп


рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлрд╝рдВрдХреНрд╢рди рддрдм рддрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп let rec рдмрдЬрд╛рдп let rec рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ let рдпрд╣рд╛рдВ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 рд▓реЗрдЯ рд░реЗ рд░реЗрдВрдЬ рдПрдм =
   рдЕрдЧрд░ a> b рддреЛ []
   рдФрд░ рдПрдХ :: рд░реЗрдВрдЬ (рдП + 1) рдмреА
   ;;

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реАрдорд╛ рд╕реНрд╡рдпрдВ рдХреЙрд▓ рдХрд░рддреА рд╣реИред

let rec and let rec рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╣реИред рдпрджрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ let рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ range рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рдореМрдЬреВрджрд╛ (рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рд░рд╛рдЗрдЯ-рдЕрдм-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп range рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред let (рдмрд┐рдирд╛ rec ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 let рдкреЙрдЬрд┐рдЯрд┐рд╡_рд╕рдо рдПрдм = 
     рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ = рдПрдХ рдЕрдзрд┐рдХрддрдо реж
     рдФрд░ рдмреА = рдЕрдзрд┐рдХрддрдо рдмреА 0 рдореЗрдВ
     рдП + рдмреА


рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд┐рдЫрд▓реЗ "рдмрд╛рдЗрдВрдбрд┐рдВрдЧ" a рдФрд░ b рдЫреБрдкрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирдП рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ let a_pos = max a 0 ( let a_pos = max a 0 ) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЕрдиреБрдкрд▓рдмреНрдз рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЗрд╡рд▓ a рдФрд░ b рдХреЗ рдирд╡реАрдирддрдо рдорд╛рди b ред

let rec рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП let rec рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЯрд╛рдЗрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди


рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, OCaml рдЕрдХреНрд╕рд░ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдлрд╝рдВрдХреНрд╢рди f рдЬреЛ arg 1 , arg 2 , ... arg n рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ rettype рд╕рдВрдХрд▓рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
 f: arg1 -> arg2 -> ... -> argn -> rettype

рддреАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рддрдерд╛рдХрдерд┐рдд рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рд░реНрдпреЛрдВ (рдХрд░реА) рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИред рдЖрдЗрдП рд╣рдо рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░рд╛ repeated рдХрд╛рд░реНрдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 рджреЛрд╣рд░рд╛рдпрд╛: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдЗрдВрдЯ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ

рд╣рдорд╛рд░рд╛ average рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рджреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ:
 рдФрд╕рдд: рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ

рдорд╛рдирдХ OCaml рдлрд╝рдВрдХреНрд╢рди int_of_char :
 int_of_char: char -> рдЗрдВрдЯ


рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рд╕реА рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП void ), рддреЛ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдк unit рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдРрд╕рд╛ рд╣реИ рдХрд┐ OCaml рдкрд░ fputs рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ:
 output_char: out_channel -> char -> рдпреВрдирд┐рдЯ

рдмрд╣реБрд░реВрдкреА рдХрд╛рд░реНрдп


рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдЬреАрдм рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рднреА рд▓реЗрддрд╛ рд╣реИ? рдпрд╣рд╛рдБ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ 3 рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИ:
  let_me_a_three x = 3 ;; 

рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ? OCaml рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЬреЛ рднреА рдЖрдкрдХреА рдЖрддреНрдорд╛ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред" рдпрд╣ рдПрдХ рдкрддреНрд░ рдХреЗ рдмрд╛рдж рдПрдХ рдПрдХрд▓ рдЙрджреНрдзрд░рдг рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
 give_me_a_three: 'a -> int

рдЬрд╣рд╛рдБ 'a рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде рд╣реИ "рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ред" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ give_me_a_three "foo" рдпрд╛ give_me_a_three 2.0 ред рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк OCaml рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реЛрдВрдЧреЗред

рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдФрд░ рдмрд╣реБрдд рдЖрдо рд╣реИрдВ; рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрдирдХреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред (рд╕рдВрдХреЗрдд: рдкреЙрд▓реАрдлрд╝рд┐рдЬрд╝реНрдо C ++ рдореЗрдВ рдкреИрдЯрд░реНрди рдпрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ)ред

рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди


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

рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ OCaml рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, OCaml рдЖрдкрдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рднреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ред

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

рдЖрдЗрдП average рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдЬрд┐рд╕реЗ OCaml рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
 # рдФрд╕рдд рдФрд╕рдд =
   (a + bред) / рд╣реИред  2.0 ;;
 рд╡реИрд▓ рдПрд╡рд░реЗрдЬ: рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ -> рдлреНрд▓реЛрдЯ = <рдлрди>


рдореАрд░рд╛рдмрд╛рдЗрд▓ рддрд╛рдирд╛рд╢рд╛рд╣! OCaml рдиреЗ рдЦреБрдж рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рджреЛ рдлрд╝реНрд▓реЛрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝реНрд▓реЛрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХреИрд╕реЗ? рдкрд╣рд▓реЗ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ a рдФрд░ b рдЙрдкрдпреЛрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (a + . b) ред рдЪреВрдВрдХрд┐ .+ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдЯреМрддреА рдпрд╣ рдШрдЯрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ a b float .

, /. float, , , average , average float. :
average : float -> float -> float
, , , . , , , NullPointerException ClassCastException (, , , , Perl).
a b float .

, /. float, , , average , average float. :
average : float -> float -> float
, , , . , , , NullPointerException ClassCastException (, , , , Perl).
 a  b     float . 

, /. float, , , average , average float. :
average : float -> float -> float
, , , . , , , NullPointerException ClassCastException (, , , , Perl).
a b float .

, /. float, , , average , average float. :
average : float -> float -> float
, , , . , , , NullPointerException ClassCastException (, , , , Perl).

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


All Articles