尝试 运行 haskell 函数时解析错误?
Parse error when trying to run haskell function?
我正在尝试编写一个 Haskell 函数,它使用折叠并将一个字符串和 return 它的“字值”作为一个 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
foldr
函数也有两个参数:列表的第一项,以及尾部foldr
的结果。因此,您应该将其实现为:
wordValue :: String -> Int
wordValue xs = foldr (<strong>\x ys -> ord (toLower x) - ord 'a' + ys + 1</strong>) 0 xs
其中x
是列表的字符,ys
是折叠列表剩余部分的结果(所以剩余元素的wordValue
)。
但这里只使用映射并总结这些更简单,所以:
wordValue :: String -> Int
wordValue = sum . map (<strong>\x -> ord (toLower x) - ord 'a' + 1</strong>)
我正在尝试编写一个 Haskell 函数,它使用折叠并将一个字符串和 return 它的“字值”作为一个 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
foldr
函数也有两个参数:列表的第一项,以及尾部foldr
的结果。因此,您应该将其实现为:
wordValue :: String -> Int
wordValue xs = foldr (<strong>\x ys -> ord (toLower x) - ord 'a' + ys + 1</strong>) 0 xs
其中x
是列表的字符,ys
是折叠列表剩余部分的结果(所以剩余元素的wordValue
)。
但这里只使用映射并总结这些更简单,所以:
wordValue :: String -> Int
wordValue = sum . map (<strong>\x -> ord (toLower x) - ord 'a' + 1</strong>)