mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-24 10:01:38 +00:00
Merge pull request #759 from dmbaturin/master
Strings/character section and minor fixes in the OCaml tutorial.
This commit is contained in:
commit
61735345c4
@ -10,7 +10,7 @@ features.
|
|||||||
Along with StandardML and its dialects it belongs to ML language family.
|
Along with StandardML and its dialects it belongs to ML language family.
|
||||||
Just like StandardML, there are both a compiler and an interpreter
|
Just like StandardML, there are both a compiler and an interpreter
|
||||||
for OCaml. The interpreter binary is normally called "ocaml" and
|
for OCaml. The interpreter binary is normally called "ocaml" and
|
||||||
the compiler is "ocamlc.opt". There is also a bytecode compiler, "ocamlc",
|
the compiler is "ocamlopt". There is also a bytecode compiler, "ocamlc",
|
||||||
but there are few reasons to use it.
|
but there are few reasons to use it.
|
||||||
|
|
||||||
It is strongly and statically typed, but instead of using manually written
|
It is strongly and statically typed, but instead of using manually written
|
||||||
@ -59,11 +59,19 @@ written in curried form.
|
|||||||
|
|
||||||
(* Expressions can be separated by a double semicolon symbol, ";;".
|
(* Expressions can be separated by a double semicolon symbol, ";;".
|
||||||
In many cases it's redundant, but in this tutorial we use it after
|
In many cases it's redundant, but in this tutorial we use it after
|
||||||
every expression for easy pasting into the interpreter shell. *)
|
every expression for easy pasting into the interpreter shell.
|
||||||
|
Unnecessary use of expression separators in source code files
|
||||||
|
is often considered to be a bad style. *)
|
||||||
|
|
||||||
(* Variable and function declarations use "let" keyword. *)
|
(* Variable and function declarations use "let" keyword. *)
|
||||||
let x = 10 ;;
|
let x = 10 ;;
|
||||||
|
|
||||||
|
(* OCaml allows single quote characters in identifiers.
|
||||||
|
Single quote doesn't have a special meaning in this case, it's often used
|
||||||
|
in cases when in other languages one would use names like "foo_tmp". *)
|
||||||
|
let foo = 1 ;;
|
||||||
|
let foo' = foo * 2 ;;
|
||||||
|
|
||||||
(* Since OCaml compiler infers types automatically, you normally don't need to
|
(* Since OCaml compiler infers types automatically, you normally don't need to
|
||||||
specify argument types explicitly. However, you can do it if you want or need to. *)
|
specify argument types explicitly. However, you can do it if you want or need to. *)
|
||||||
let inc_int (x: int) = x + 1 ;;
|
let inc_int (x: int) = x + 1 ;;
|
||||||
@ -196,6 +204,39 @@ let my_array = [| 1; 2; 3 |] ;;
|
|||||||
my_array.(0) ;;
|
my_array.(0) ;;
|
||||||
|
|
||||||
|
|
||||||
|
(*** Strings and characters ***)
|
||||||
|
|
||||||
|
(* Use double quotes for string literals. *)
|
||||||
|
let my_str = "Hello world" ;;
|
||||||
|
|
||||||
|
(* Use single quotes for character literals. *)
|
||||||
|
let my_char = 'a' ;;
|
||||||
|
|
||||||
|
(* Single and double quotes are not interchangeable. *)
|
||||||
|
let bad_str = 'syntax error' ;; (* Syntax error. *)
|
||||||
|
|
||||||
|
(* This will give you a single character string, not a character. *)
|
||||||
|
let single_char_str = "w" ;;
|
||||||
|
|
||||||
|
(* Strings can be concatenated with the "^" operator. *)
|
||||||
|
let some_str = "hello" ^ "world" ;;
|
||||||
|
|
||||||
|
(* Strings are not arrays of characters.
|
||||||
|
You can't mix characters and strings in expressions.
|
||||||
|
You can convert a character to a string with "String.make 1 my_char".
|
||||||
|
There are more convenient functions for this purpose in additional
|
||||||
|
libraries such as Core.Std that may not be installed and/or loaded
|
||||||
|
by default. *)
|
||||||
|
let ocaml = (String.make 1 'O') ^ "Caml" ;;
|
||||||
|
|
||||||
|
(* There is a printf function. *)
|
||||||
|
Printf.printf "%d %s" 99 "bottles of beer" ;;
|
||||||
|
|
||||||
|
(* Unformatted read and write functions are there too. *)
|
||||||
|
print_string "hello world\n" ;;
|
||||||
|
print_endline "hello world" ;;
|
||||||
|
let line = read_line () ;;
|
||||||
|
|
||||||
|
|
||||||
(*** User-defined data types ***)
|
(*** User-defined data types ***)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user