我最近開始學習Haskell,並且遇到了字典問題。我使用一個鍵從字典中獲取整數,GHCi在字符串中使用第一個元素作爲字典的鍵時,打印出一個錯誤「無法與類型Char匹配[Char]」。下面是代碼:無法將類型Char與[Char]匹配,Haskell
import Data.Map
mapRomantoInt :: Map String Int
mapRomantoInt = fromList[("I",1),("V",5),("IX",9),("X",10),("L",50),("C",100),("D",500),("M",1000)]
romanToInt :: String -> Int
romanToInt _ = 0
romanToInt c = if length c == 1 then mapRomantoInt ! head c else
let first = mapRomantoInt ! head c
second = mapRomantoInt ! (c !! 1)
others = romanToInt(tail c)
in if first < second then others - first else others + first
'頭部c'是一個字符。改用'[head c]'。與c一樣! 1':應該是[c !! 1]'。 –
請注意,這種編程風格效率低下('長度'掃描整個列表),危險的(像head,tail,!!這樣的函數會在列表太短時使程序崩潰)和不正確的('romanToInt',如書面所示,總是返回'0')。我強烈建議你避免這種非慣用風格,並嘗試利用模式匹配,這是更安全和更習慣。 – chi