2017-03-27 61 views
2

我需要從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

+1

Haskell有一個'sum'功能。如果列表中包含偶數(而不是這些數字的字符串表示形式),只需對列表進行求和即可。我不明白爲什麼這是一個問題。當然你已經看到了如何總結名單。通常,你會在Haskell中看到一個遞歸函數定義的第一個例子,就是對列表進行求和(如果你不想使用內置的'sum')。 –

+0

你也在重新實現'filter'函數。 – chepner

回答

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) 
2

另一替代寫入相同

import Data.Char(digitToInt) 

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