我開始學習OCaml語言。你能告訴我爲什麼這段代碼顯示錯誤嗎? let unite x =
if x < 100 then x mod 10
else if x >= 100 then x mod 100;;
let dizaine x =
if x < 100 then x/10
else if x >= 10 then unite(x/10);;
問題 爲什麼 val of_bindings : (key * '_a) list -> '_a t
val of_bindings : (key * 'a) list -> 'a t
不同的簽名? 語境 我有一些地圖擴展實現: MAPEXT.ml: module type T = sig
include Map.S
val of_bindings : (key * '
我想在OCaml中實現一個隊列結構,現在正在編寫一個測試值是否在隊列中的函數。我原本寫了一個正確的 - 或者至少我認爲這是一個正確的 - 實現的功能。但是當我測試它時,我會得到意想不到的測試失敗。也就是說,當隊列是空的時候它會返回false(一件好事),但在其他情況下也會返回false,無論隊列是否爲空,以及隊列是否包含該值。所以我用這種愚蠢的方式重新編寫了這個函數(其中Some h -> tru
當我運行以下代碼時,出現語法錯誤,但據我所知,語法是正確的。這將嘗試實現隊列結構,其中函數from_list將列表轉換爲具有相應值的隊列。我寫了str_of_int_q來打印隊列的內容。 x和y應該是兩個節點,頭部爲x,尾部爲y。 ;; open Assert
type 'a qnode = {v: 'a;
mutable next: 'a qnode option}
typ
我在查找OCaml中典型指數函數的更快版本時遇到了問題。這裏有一些指引,我試圖遵循: 不是的expt b n ==> b * (b * (b ...)典型的遞歸指數版本的函數接收兩個參數B和N,基本上採取分而治之的立場。 如果n爲偶數,則fastexpt b n => (b^(n/2))^2否則,如果n是奇數則fastexpt b n => b * (b^(n - 1)) 下面是我迄今編寫的代碼:
這是我的函數映射在二叉樹 type 'a btree = Empty
|Node of 'a * 'a btree * 'a btree
let rec treemap t f = match t with
|Empty -> Empty
|Node(root,left,right)-> Node(root f, treemap left f, treemap
我最終試圖做的事情是1)限制對模塊(因此mli文件)的可見性和2)定義一個函子,其中參數具有「規範實現「,它作爲一個ml/mli對生活在源碼樹中,並堅持參數具有與此規範實現相同的形狀。 假設我有一個包含字符串連接 (* concat.ml *)
type t = string
let concat x y = x^y
單一功能的文件concat.ml和我有一個接口,它 (* concat.