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).











All Articles