2014-07-19 58 views
-3
rango :: [Integer] -> [Integer] -> [[Integer]] -> [Integer] 
rango (length list) b list = 
rango a b list = if ((list!!a) == (list!!b)) then 0++(rango a b+1 list) 
      else(rango2 a list!!b list)++(rango a b+1 list) 


rango2 :: [Integer] -> [Integer] -> [[Integer]] -> [Integer] 
rango2 a b list = if verif((take 2(map(+(a!!2))a)) (take 2(map(-(a!!2))a)) (take 2(b))) then [1] 
    else [0] 


verif :: [Integer] -> [Integer] -> [Integer] -> Bool 
verif a b c = if ((c!!0 < a!!0) && (c!!0 > b!!0) && (c!!1 < a!!1) && (c!!1 > b!!1)) then True 
      else False 

誤差爲:解析錯誤(可能不正確壓痕或不匹配的括號)錯誤有關此Haskell代碼

在這條線

rango a b list = if ((list!!a) == (list!!b)) then 0++(rango a b+1 list) 

回答

3
rango :: [Integer] -> [Integer] -> [[Integer]] -> [Integer] 
rango (length list) b list = 

上面一行缺乏定義之後的=。這使編譯器在下面的行中產生混淆。正如Rhymoid指出的那樣,(length list)不是有效的模式。

作爲一般性評論,您的代碼似乎也包含幾個類型錯誤。你可能應該重新考慮一下你的方法。你確定你的函數的類型簽名是正確的嗎?你真的需要輸入兩個整數列表和一個矩陣嗎?輸出是否是一個整數列表?

我的建議是首先學習Haskell的基礎知識,從簡單的練習開始。如果你正在嘗試編寫一個函數來計算矩陣的秩,在這個階段這可能太複雜了。

+0

而'長度列表'不是一個有效的模式。 –

+3

還有23個問題......這個程序沒有任何意義。 –

+0

嗯okok,以及我怎麼能得到像參數,列表的長度? e g:當他到達列表的最後一個元素時,我希望函數退出!? –