2017-06-12 36 views
0

下面的代碼是一個函數sum2,它作爲參數 獲取一個數字列表並返回偶數 索引的元素總和。任何人都可以解釋這個代碼的工作原理什麼是X和X以及如何找到偶數並添加它們?Haskell函數列表(查找偶數索引並添加它們)〜代碼說明

sum2 :: [Integer] -> Integer 
sum2 [] = 0 
sum2 (x:xs) | mod x 2 == 0 = x + sum2 xs 
      | otherwise = sum2 xs 

sum2' :: [Integer] -> Integer 
sum2' [] = 0 
sum2' [x] = x 
sum2' (x:_:xs) = x + sum2' xs 

,所以如果你在控制檯SUM2 [2,3,3,4,0,6]將只添加偶數,結果將是命中:12

回答

1

sum2看起來總結所有即使。 x是「當前」值(列表的頭),其餘爲xs。如果mod x 2 == 0(偶數),則將x添加到列表的其餘部分的總和中,否則跳過它並對列表的其餘部分求和。

sum2'根據位置而非價值選擇元素。

  1. 最後一種情況,如果在該列表至少兩個元件,跳過第二個和添加第一個其餘部分的總和。
  2. 如果有只有一個,那就是總和。
  3. 如果有,總和爲0。

所以它在下降每隔第二元件,求和的第一,第三,第五等(索引0,2,4,等) 。

+0

我不明白你的第一點,爲什麼我們應該跳過第二個並添加第一個? – csandreas1

+0

@ csandreas1它基本上彈出列表中的2個元素,並保留其中一個元素。如果你想要保持第一個索引的索引,並且如果你想要奇數索引,你需要第二個(並且單個元素的情況也會忽略該元素)。 '_'基本上意味着忽略這個元素 - 因爲我們沒有命名它,所以我們不能使用它。 – ryachza