2013-02-01 219 views
0

我是OCaml的新手,所以我正在學習基礎知識。我正在寫一個函數來確定列表是否包含給定的整數。詮釋OCaml詮釋清單

let rec int_member (x: int) (l: int list) : bool 
begin match l with 
| [] -> false 
| hd :: rest -> x = hd || int_member rest x 
end 

作爲測試用例...

let test(): bool = 
(int_member 1 [1;2;3]) = true 
;; run_test "contains 1 [1;2;3]" test 

我收到一個錯誤說,「這表達了int類型列表中,但預計int類型的表達式」。我怎樣才能解決這個問題?

回答

2

如果你看看你的遞歸調用,你應該看到你沒有正確地傳遞參數!否則,這個代碼是相當不錯的。 (我看到一個失蹤=,並且還使用beginend不是很地道的OCaml在這裏,你可以只留下他們。)

+0

謝謝!剛剛得到它!應該是int_member x rest – user1993381

+0

另一個問題。關於風格,是否有另外一種寫這種表達方式?如果(a = k)然後b else(assoc k rest) – user1993381

+1

對我很好。我親自離開了父母。 –

1

int_member其餘X

的第一個參數int_member應是一個int。作爲第一個參數,您傳遞的是int list。這就是錯誤信息所抱怨的。

您只需切換參數的順序。

PS:代碼中的begin ... end是多餘的。