2012-01-17 94 views
0

這是一個函數,我計算出等價類是一組元素都是等價的。意在反覆遍歷矩陣列中的所有條目;計算與關係自反的等價類,並檢查兩個方向使用'忽略'來通過編譯器

let eq_class m i = 
    let column = m.(i) 
    and set = ref [] in 
    Array.iteri begin fun j l -> 
    if j = i || column.(j) && m.(j).(i) then 
     set := j :: !set else ignore l 
    end column; 
    !set;; 

能否請您解釋一下我關於l,我不得不用ignore通過編譯器。如何在不使用ignore的情況下在l上編寫此功能?

+0

我得到'文件「m.ml」,第6行,字符37-38: 錯誤:語法error'上你的榜樣。 – 2012-01-17 08:38:33

+0

我認爲這是因爲我在代碼中忽略了'l'。謝謝我將它固定在ignore l上。 – Quyen 2012-01-17 08:41:03

回答

8

您可以用ignore l替換():它具有相同的類型和做同樣的事情(什麼)。

else分支應具有相同的類型如then分支表達的表達,且表達的在then分支類型是unit

此外,存在一個縮短的方便構建if condition then expression else()。較短的等價結構是if condition then expression,你可以在你的程序中使用:

let eq_class m i = 
    let column = m.(i) 
    and set = ref [] in 
    Array.iteri begin fun j l -> 
    if j = i || column.(j) && m.(j).(i) then 
     set := j :: !set 
    end column; 
    !set;;