初學者嘗試做99題。這是我解決第三個問題的嘗試(是):
elementAt :: [a] -> Int -> Maybe a
elementAt _ x | x <= 0 = Nothing
elementAt [] x | x > 0 = Nothing
elementAt (x: _) 1 = Just x
elementAt (_: xs) x | x > 1 = elementAt xs (x-1)
testElementAt :: IO ()
testElementAt = do
print (elementAt []::[Int] 5)
print (elementAt []::[Int] 0)
print (elementAt [1, 2, 3] 2)
print (elementAt [1, 2, 3] 5)
print (elementAt [1, 2, 3] 1)
print (elementAt [1, 2, 3] 0)
main :: IO ()
main = do
testElementAt
錯誤資訊:
error:
Illegal type: ‘5’ Perhaps you intended to use DataKinds
print (elementAt []::[Int] 5)
^
我想這與5能夠成為 Int 和 Float 有關嗎?(就像[]我必須輸入它::[Int]以通過編譯器一樣?)但是,同樣的技巧似乎不起作用。
我該怎么辦?
uj5u.com熱心網友回復:
5這里是型別簽名的一部分。如果要指定串列的型別,請執行以下操作:
print (elementAt ([] :: [Int]) 5)
因此,在這里我們給出了一個型別提示,即空串列是Ints 的串列。在5這種情況下,因此被視為第二個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/423015.html
標籤:
上一篇:在Haskell中更新外部變數
