рдореВрд▓ рдмрд╛рддреЗрдВ
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
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 рдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реЛрдВрдЧреЗ:
- рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ?
- рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
float -> float -> float
?
рд╣рдо рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд┐рдореНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВ C рдореЗрдВ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ (рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛), рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдФрд╕рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ C рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
рджреЛрд╣рд░рд╛ рдФрд╕рдд (рдбрдмрд▓ рдбрдмрд▓ рдмреА) { рд╡рд╛рдкрд╕реА (рдП + рдмреА) / 2; }
OCaml рдкрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рд╣реИрдВ:
- рд╣рдордиреЗ OCaml рд╡рд░реНрдЬрди рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рдЯрд╛рдЗрдк
a
рдФрд░b
рдХреНрдпреЛрдВ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ? OCaml рдиреЗ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛? (рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, OCaml рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирддрд╛ рд╣реИ , рдпрд╛ рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рд╣реИ?) - C рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ 2 рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рд╣реИ, рдХреНрдпрд╛ OCaml рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
- OCaml рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреИрд╕реЗ рд╣реИ?
рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЬрд╡рд╛рдм рджрд┐рдП рдЧрдП рд╣реИрдВ:
- OCaml рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдордЬрдмреВрдд рд╕реНрдЯреЗрдЯрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкрд░реНрд▓ рдореЗрдВ int, float рдФрд░ string рдХреЗ рдмреАрдЪ рдХреЛрдИ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХрд╛рд╕реНрдЯ рдЬреИрд╕реА рдХреЛрдИ рдЬрд╛рддрд┐ рдирд╣реАрдВ рд╣реЛрддреА)
- OCaml рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ OCaml рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдХреЛрдб рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ OCaml рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ
- OCaml рдХрд┐рд╕реА рднреА рдирд┐рд╣рд┐рдд рдЬрд╛рддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдлреНрд▓реЛрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
2.0
рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐2
рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ [рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж: рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ, рдЕрдВрд╢ рднрд╛рдЧ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдВрджреБ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ, "рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛", рдЗрд╕рд▓рд┐рдП OCaml рдореЗрдВ, рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ]ред OCaml рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ int, float, string, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ред - OCaml рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдСрдкрд░реЗрдЯрд░реЛрдВ рд╕рд╣рд┐рдд) рдХреЛ рдУрд╡рд░рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред OCaml рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд░реВрдк рдореЗрдВ
+
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП,+.
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ+.
(рдкреНрд▓рд╕ рд╕рд╛рдЗрди рдХреЗ рдмрд╛рдж рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛)ред рдЗрд╕реА рддрд░рд╣,-.
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ-.
,*.
,/.
рдЕрдиреНрдп рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдПред - 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).