【发布时间】:2020-04-10 00:54:19
【问题描述】:
我想知道如何编写一个函数,该函数将接受两个参数,即 a' 和 b'(它们是函数),以及一个列表列表;
然后,如果 int 列表(我的意思是包含整数)列表中的任何列表中的元素之和是奇数,它将执行乘法运算 - 函数 a' (乘以相同的整数 -> x * x),在该列表中的每个元素上。
否则,如果 int-lists 列表中任何列表中的元素之和为偶数,它将执行加法运算 - 函数 b' (添加。使用相同的整数 -> x + x),在该列表中的每个元素上。
因此,带有输入的函数调用将是:
func a b [[1;3];[8;3]];;
...然后输出应如下所示:
- : int list list = [[2; 6]; [64; 9]]
第一个列表的元素总和是偶数,所以第一个列表会被相加 第二个列表中元素的和为奇数,表示第二个列表将被相乘。
我在 Ocaml 中编写了这个函数作为练习,我真的很难理解这种语言;我想知道我做错了什么... 此外,我们将不胜感激战略帮助! - 也就是说,对事物如何的解释 实际上在 Ocaml 中工作,虽然我对 Ocaml 并不完全是新手,但我已经学到了很多关于尾递归函数的知识,只是函数之间的参数交换让我很困扰。
好的,代码如下:
let a = List.map (List.fold_left ( + ) 0)
let b = List.map (List.fold_left ( * ) 0)
let rec func a b lists = if lists = [] then []
else if ((List.map (List.fold_left ( + ) 0)) mod 2 = 0) then List.map
(List.fold_left ( + ) 0)
else List.map (List.fold_left ( * ) 0)
(* Function call: *)
func (fun x -> x*x) (fun x -> x+x) [[1;3];[5;7]];;
【问题讨论】:
标签: matrix ocaml tail-recursion