我正在嘗試撰寫一個使用折疊的 Haskell 函式,它將接受一個字串并將其“單詞值”作為 int 回傳。這是功能:
import Data.Char
wordValue :: String -> Int
wordValue (x:xs) = foldr (\(ord(toLower x) - (ord 'a') 1)) 0 xs
基本上,我正在嘗試將每個字符轉換為一個 int 值并使用“foldr”函式來累積該值。但是,我收到以下錯誤,我不明白:
Parse error in pattern: ord (toLower x) - (ord 'a') 1
uj5u.com熱心網友回復:
該foldr函式還接受兩個引數:串列項和foldr尾部的結果。因此,您應該將其實作為:
wordValue :: String -> Int
wordValue xs = foldr (\x ys -> ord (toLower x) - ord 'a' ys 1) 0 xs
wherex是串列的字符,并且ys是折疊串列其余部分的結果(因此是wordValue其余元素的折疊)。
但是在這里使用映射并將它們總結起來更簡單,所以:
wordValue :: String -> Int
wordValue = sum . map (\x -> ord (toLower x) - ord 'a' 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469239.html
