Haskell 从string和sum中获取偶数
我需要从字符串输入中找到所有偶数 我设法把所有的偶数都列出来了,但我真的不明白以后怎么才能得到这些偶数的总和Haskell 从string和sum中获取偶数,haskell,Haskell,我需要从字符串输入中找到所有偶数 我设法把所有的偶数都列出来了,但我真的不明白以后怎么才能得到这些偶数的总和 numbers :: String -> [Int] numbers [] = [] numbers (l:ls) = if ord l == 48 || ord l == 50 || ord l == 52 || ord l == 54 || ord l == 56 then (ord l - 48): (numbers ls) else (numbers ls)
numbers :: String -> [Int]
numbers [] = []
numbers (l:ls) = if ord l == 48 || ord l == 50 || ord l == 52 || ord l == 54 || ord l == 56
then (ord l - 48): (numbers ls)
else (numbers ls)
所以结果会是:abc1234=>6你已经很漂亮了。ord l-48从字符串中提取整数值,因此必须累加该值。或者总结出结果,基本上是一个函数 基本的递归循环是:
numbers :: String -> Int -> Int
Given an empty string and accumulated value -> return accumulated value
Given string (l:ls) not empty and accumulated value ->
if l matches your criteria
numbers ls (accumulated value + (ord l - 48))
else
numbers ls (solely the accumulated value, as `l` doesn't match criteria)
另一种写同样内容的方法
import Data.Char(digitToInt)
sumEvens = sum . map digitToInt . filter (`elem` "2468")
Haskell有一个求和函数。如果列表中有偶数而不是这些数字的字符串表示形式,只需对列表求和即可。我不明白为什么这是个问题。你肯定已经看过如何对列表进行求和了。通常,您在Haskell中看到的递归函数定义的第一个示例之一是,如果您不想使用内置的求和,则求和列表。您还将重新实现filter函数。