从字符串和求和得到偶数

时间:2017-03-27 16:30:19

标签: haskell

我需要从String输入中找到所有偶数。

我设法将所有偶数列出来,但我不明白,我怎么能在之后得到那些偶数的总和。

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

2 个答案:

答案 0 :(得分:2)

你已经很漂亮了。 (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)

答案 1 :(得分:2)

另一种写同样的方法

import Data.Char(digitToInt)

sumEvens = sum . map digitToInt . filter (`elem` "2468")