尝试 运行 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>)