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函数。