天天看點

OCaml語言開發(1)

       由于項目需要,需要研究OCaml語言,一時無從小時,自網上拜讀幾位前輩的心得後,有一些了解。現在總結如下:

       OCaml是一種函數式程式設計語言,是一種面向對象的ML語言。不同于結構性語言。其函數可以當作具體的值來使用;使用變量時,無需定義變量的類型,編譯器可以自動推測出變量的語言類型;但此語言的類型經過定義後就無法改變。

       常見操作

       1、let綁定,函數、變量定義 let x=2;let add  x y=x+y;

      # let add x y = x+y;;

      val add : int -> int -> int = <fun>

      # add 12 13;;

      - : int = 25

       标準短語

let name = expression in

可以用于定義一個局部表達式,然後

name

就可以在後面的函數中使用,來替代

expression

了,直到結束該代碼塊的

;;

出現。

注意在

in

後面我們并沒有縮進。就把

let...in

當作是一個語句。let in在函數内使用時可以表示對局部變量指派。

       2、if match,判斷語句

      # let pd n = if n=2 then true else false;;

      val pd : int -> bool = <fun>

      # pd 3;;

      - : bool = false

      # pd 2;;

      - : bool = true

     # pd 4;;

     - : bool = false

    # let mat n= match n*20 with 20->true | _->false;;

    val mat : int -> bool = <fun>

    # mat 1;;

    - : bool = true

   # mat 2;;

   - : bool = false

   3、float_of_int,int_of_float;兩個類型轉換函數,在進行資料操作時可以使用。

   4、鍊,這是ML語言中的一個基本資料結構,[]這裡面儲存list資料結構,結構之間通過::連接配接起來,比如[1:2:3]::[4:5];采用标準庫函數list.map可以友善的調用函數處理鍊中的每個元素。如

     # let sum x = x*x;;

     val sum : int -> int = <fun>

     # let w=[2;3;4;5;6];;

    val w : int list = [2; 3; 4; 5; 6]

    # List.map sum w;;

     - : int list = [4; 9; 16; 25; 36]

        tuple(元組),用()表示,可以儲存任意的資料結構。(2,2.45,func x->x*x);

       record表有名字的資料組合;{a:int,b:string};類似于c語言中的struct結構。

      type 可以自定義各種資料結構。

    5、ref,引用,OCaml語言是一個常量語言,這就意味着常量一旦指派,其值不可改變。如果你想在程式中利用一個值,并且對其進行操作,可以使用這一個操作符。:=是對應用指派,!=是顯示目前引用的值。

# let ex_rf= ref 56;;     //生成一個引用ex_rf

val ex_rf : int ref = {contents = 56}

# ex_rf:=59;;               //對引用指派59

- : unit = ()

# !ex_rf;;                     //顯示引用的目前值

- : int = 59   

下面這個例子是對字元串進行的操作。

# let e_rf=ref "nankai";;

val e_rf : string ref = {contents = "nankai"}

# !e_rf;;

- : string = "nankai"

# e_rf:="wengchen";;

- : string = "wengchen"

也可以通過<-對引用進行指派

# e_rf.contents<-"wjf";;

- : string = "wjf"

6、函數,在Ocaml中函數相關的關鍵字有兩個 function、fun,其中function關鍵字定義的函數隻能有一個參數,而fun關鍵字定義的函數可以有多個參數。

# let c n = fun x y ->n+1;;

val c : int -> 'a -> 'b -> int = <fun>

# c 3;;

- : '_a -> '_b -> int = <fun>

# c 3 4;;

- : '_a -> int = <fun>

# c 3 4 5;;

- : int = 4

有的函數沒有參數,但又不能為了防止編譯器将函數誤認為變量定義,需要加()表示沒有參數。()等同于unit。

遞歸函數相對于普通函數的差別是要在在函數名稱前面加了一個rec,如果不加rec,那麼編譯器會報錯。之是以加rec的原因是因為Ocaml在一個函數被完全聲明前,并不知道自己連接配接的是哪一個。

7、算術邏輯運算符

Ocaml中沒有一進制算術運算符,隻有二進制邏輯運算符;

在Ocaml中整數和浮點數不能進行混合運算,如果一個整數和一個浮點數之間要進行算術運算,必須通過轉換函數把整數轉換成浮點數或者浮點數轉換為整數,才能進行運算,否則代碼編譯會報錯;

1 )、 字元串連接配接操作符 ^

示例:”123”^”456” 的值為”123456”

2 List 連接配接運算符

@

繼續閱讀