User:Renamed user 63506961370/OCaml入门教程/(二)基本数据类型
注释
[编辑]OCaml的注释是用(*
和*)
表示。OCaml没有Java或C#那样的//...
语法。(* ... *)
可以嵌套。
(* 单行注释 *)
(* 多
* 行
* 注
* 释
*)
注意,注释标记(和*之间不能有空格。
# 2 * 3;;
- : int = 6
# ( * ) 2 3;;
- : int = 6
基本数据类型
[编辑]数据类型 | 例子 | 解释 |
---|---|---|
int | 1 | 有符号整数。在32位系统中长度为31位;在64位系统中长度为63位。 |
float | 1. | 浮点数。IEEE定义的双精度浮点数,等同于C语言的double。 |
bool | true | |
char | 'x' | 8位的字符。 |
string | "hello" | |
unit | () | ()是unit类型的唯一的值。 |
int之所以少一位,是因为OCaml用其中的一位作为垃圾回收的标志。如果你要计算超出int范围的大数,可以使用Nat模块和Big_int模块。如果你要处理刚好32位长的数据,可以用nativeint模块。OCaml没有无符号整数,也没有单精度浮点数。OCaml的字符类型不支持Unicode或UTF-8。Camomile类库似乎可以让你写Unicode。unit类似于C语言里的void。
int的运算
[编辑]基本的运算有加减乘除(+
, -
, *
, /
)、递增(succ
)、递减(pred
)。
# 1 * 2;;
- : int = 2
*
可以作为中缀运算符,也可以在乘号两侧加括号改为前缀运算符。为了不和注释的开始和结束相混淆,括号和乘号之间要有空格。其他的中缀运算符都可以用这个技术改为前缀运算符。
# ( * )1 2;;
- : int = 2
你也可以定义自己的中缀运算符,只不过这个运算符只能含有符号,不能有字符。[1]
let (++) x y = x + y + y;;
1 ++ 2;;
其他的运算参见参考资料Module Pervasives里的Integer arithmetic一节。
float的运算
[编辑]基本的运算有加减乘除(+.
, -.
, *.
, /.
)。注意跟int运算符相比,多了个点。OCaml不支持运算符重载,所以不能像C#一样,+
既用于整数相加,又用于浮点数相加。
其他的运算参见参考资料Module Pervasives里的Floating-point arithmetic一节。
其他基本类型的运算
[编辑]- Bool:
not
,&&
,||
。 - String:
^
(连接两个字符串)。
其他的运算参见参考资料Module Pervasives。
相等性比较
[编辑]>
, >=
, <
, <=
。
==
比较两者是不是同一个对象;=
比较两者的值是否相等。!=
和<>
都表示不等于,是==
反。
其他的运算参见参考资料Module Pervasives。
类型转换
[编辑]OCaml不支持自动转型。在C#里,1+2.5=3.5
,int 1会自动转型为double,OCaml不会这么做。
把int转为float用函数float_of_int
。类似的,bool转为string用string_of_bool
,依此类推。其他的转换操作参见参考资料Module Pervasives。
参考资料
[编辑]- ↑ 具体的定义方法参见Ocaml: Why I can't use this operator infix?.於2013年10月19日查閱.、Comparing Objective Caml and Standard ML.於2013年10月19日查閱.原文:“User-defined infix operators”、6.7 Expressions.於2013年10月19日查閱.原文:“Construction or operator”。
ocaml.org和caml.inria.fr都认为是官方网站。
- The Basics.ocaml.org.於2013年10月18日查閱.
- Module Pervasives.caml.inria.fr.於2013年10月19日查閱.
- Lexical conventions.caml.inria.fr.於2013年10月19日查閱.