2013-04-08 61 views
0

比方說,我們有元素的列表:OCAML - 列表中的元素是?

[(a,b); (c,d); (e,f)] 

將檢查什麼功能,如果元素(可以說A,其中A =(X,Y))在列表或沒有?

+0

這是功課嗎? – Thomash 2013-04-10 10:37:39

回答

3

使用List.mem可以搜索匹配項。

let a = (3,4) 
List.mem a [(1,2); (3,4); (5,6)] 

您也可以使用List.memq如果要檢查,如果這兩個項目都在內存中引用同一個實體。

+0

謝謝,這確實有效。我只是想知道是否有任何方法可以編寫自己的函數,以同樣的方式檢查列表,returnig是true還是false。 – prima 2013-04-08 20:46:40

+3

當然他們是,你可以檢查列表模塊的源代碼,如果你有問題;它非常可讀。 – nlucaroni 2013-04-08 21:01:31

+0

[這裏有一組資源。](http://docs.camlcity.org/docs/godipkg/3.12/godi-ocaml/lib/ocaml/std-lib/list.ml) – 2013-04-08 21:51:53

0

這裏有一個關於如何自己寫這個的提示。處理列表的自然方法是首先查看第一個元素,然後遞歸檢查列表的其餘部分,直到您有一個空列表。對於這個問題,你可以在英文狀態下的算法如下:

如果列表爲空,則該產品不在列表中, 否則,如果第一個列表元素等於該項目則是, 否則它是(是在列表的其餘部分的項目?)

現在你只需要將其轉換成OCaml代碼(使用遞歸函數)。一般來說,如果你可以用更小或更簡單的部分來描述你想要做的事情,那麼編寫recursive代碼很簡單(儘管你必須小心基本情況是正確的)。當使用列表或樹型結構數據時,分解問題的方式通常很明顯。