我有一个问题,即我想将以下代码转换为用于添加偶数列表元素的递归函数,但是不幸的是我不知道多少...
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()
谢谢您的帮助!
答案 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函数中计算偶数元素的和,不存储偶数元素的列表,而是存储它们的和。