2017-08-22 33 views
1

我想在OCaml中編寫一個函數,給定矩陣中包含條目「u」,「d」,「l」,「r」和「x」的座標「,返回true如果從該座標的'方向'結束於」x「,或者否則爲在OCaml中找到一個矩陣中的x

我的策略是檢查,如果我之前訪問過的當前單元格(如果是的話,返回),通過傳遞矩陣的bool的通過,更新當前單元格的真值。

我現在的嘗試是低於(ñ是我試圖瀏覽樣品基質):

let n = [| [|"u"; "d"; "l"; "l"; "r"|]; 
      [|"r"; "d"; "r"; "l"; "l"|]; 
      [|"u"; "r"; "d"; "d"; "l"|]; 
      [|"u"; "l"; "l"; "d"; "u"|]; 
      [|"r"; "x"; "l"; "l"; "d"|]; 
      [|"r"; "d"; "u"; "d"; "l"|]|];; 
let xMax = (Array.length n);; 
let yMax = (Array.length n.(0));; 
let t = Array.make_matrix xMax yMax false;; 

let rec f m x y t = 
if x < 0 || y < 0 || x >= (Array.length m) || y >= (Array.length m.(0)) || t.(x).(y) = true 
then false 
else (
    if m.(x).(y) = "x" then true 
    else (
     t.(x).(y) <- true 
     if m.(x).(y) = "l" then f m x (y-1) t 
     else if m.(x).(y) = "r" then f m x (y+1) t 
     else if m.(x).(y) = "u" then f m (x-1) y t 
     else if m.(x).(y) = "d" then f m (x+1) y t 
     else false 
     ) 
    );; 

任何人都可以用如何解決這個幫助嗎?這是行

t.(x).(y) <- true 

不工作(註釋它使功能運行,但不更新矩陣t)。

在此先感謝!

+1

Add';' '真'後,或不會編譯。 – avysk

+1

您應該始終指定遇到的失敗類型:編譯時(語法錯誤,鍵入錯誤)或運行時錯誤。最佳做法是複製系統的確切錯誤信息以便使用,其他人更容易幫助您 – ghilesZ

+0

謝謝。下次我會記住這一點 – Ronnie268

回答

2

您錯過了t.(x).(y) <- true表達式後的分號。如果沒有分號,程序會被編譯器解析爲:

t.(x).(y) <- (true if m.(x).(y) = "l" then f m x (y-1) t ...)