通行證下面的功能,通過此Binary Tree: let rec inorder(t:tree) : int list =
begin match t with
| Empty -> []
| Node (left, x, right) -> inorder left @ (x :: inorder right)
end
爲什麼結果[1; 2; 3; 4
這兩者之間有什麼區別嗎? 我不知道他們的,我應該把我的.mli文件 module Comparable : sig
type t
val compare : t -> t-> int
end
module type Comparable = sig
type t
val compare : t -> t-> int
end
在real world
我正在實施一個使用Ocaml的模擬解釋器。其中一個模擬功能是使用模式匹配來評估組成表達式。 這個問題是微不足道的,絕對可以解決,但我試圖找到一個更優雅的方式來做到這一點,所以請繼續閱讀,如果你仍然感興趣! 我的用戶定義類型的代碼片段看起來是這樣的: type value =
| Val_Int of int
| Val_Bool of bool
type expr =
從我迄今爲止觀察到的情況來看,帶有可變字段的記錄的行爲就好像它們總是通過引用傳遞一樣。例如,如果我將某個記錄傳遞給一個函數或將其存儲在一個數據結構中,則該記錄不會在該過程中被複制。例如,下面的代碼: type t = {
mutable t_val: int
}
let() =
let ht = Hashtbl.create 16 in
let x = { t_
函數調用返回的列表 我使用下面的函數打印列表 let rec print_list = function
[] ->()
| e::l -> print_int e ; print_string " " ; print_list l;;
我使用下面的函數來扭轉名單 let rec rev l =
match l with
[] -> []
| h::t
我試圖實現的是,我自己的版本List.fold_right或List.fold_left與Event Module和Thread Module爲了加快過程。 (我知道,ocaml的不支持多線程並行,但我在這裏的概念) 我嘗試:(雖然我不知道我贏了額外的時間) open Thread
open Event
let rec tapply f start = function
| [] -