F#递归函数,用于添加偶数列表元素

时间:2019-03-21 22:33:55

标签: list f# sum

我有一个问题,即我想将以下代码转换为用于添加偶数列表元素的递归函数,但是不幸的是我不知道多少...

 2019/03/21 10:03:26 [error] 17172#17172: *65 FastCGI sent in stderr: "PHP message: Warning: Warning: Failed setting locale d e _ D E . utf8,de_DE.UTF-8,german for de in ~/includes/library/lib_language.inc.php on line 110
 ↠~/includes/library/lib_language.inc.php on line 23 in set()
↠~/includes/classes/system.inc.php on line 38 in forward_static_call()
↠~/includes/app_header.inc.php on line 32 in run()
↠~/admin/index.php on line 2 in require_once()

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用模式匹配来检查列表中的第一个元素是否为偶数, 如果是这样,则将其添加到累加器列表中,并在列表的其余部分上调用相同的方法。如果元素是奇数-只需为列表的其余部分调用相同的方法,而无需向累加器添加任何内容。当列表为空时-返回累加器,您将得到偶数列表。

  let rec getEven (input : int list) (acc: int list)  = 
    match input with
    | head :: tail when head % 2 = 0 -> (getEven tail (head :: acc))
    | head :: tail when head % 2 = 1 -> (getEven tail (acc))
    | _ -> acc

  let even = getEven [1..10] []
  let sum = List.sum even

上面的函数将产生:

val getEven : input:int list -> acc:int list -> int list
val even : int list = [10; 8; 6; 4; 2]
val sum : int = 30

P.S。要计算元素的总和,应使用List.sum而不是List.length来返回列表中元素的数量。 还要注意,您可以在getEven函数中计算偶数元素的和,不存储偶数元素的列表,而是存储它们的和。