用戶: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日查閱.