假设我有一个功能列表
let plus_one (x: int) : int = x + 1 in
let double (x: int) : int = x * 2 in
let square (x: int) : int = x * x in
let fun_list = [square, double, plus_one] ;;
使用fold,我想获取这个函数列表并将它们组合成一个函数。像,
let combined (x: int) : int = x * (2 * (x + 1))
这就是我所拥有的:
let combine_functions (fun_list : ('a -> 'a) list) : ('a -> 'a) =
List.fold_right (fun f acc -> f acc) fun_list (fun x -> x)
;;
我认为这会有效,但是当我尝试运行它时,它会告诉我这个表达式有类型' a - > ' a何时应该有类型(' a - >' a) - > (' a - >' a)
答案 0 :(得分:1)
我通过更改
中的第二行代码解决了这个问题List.fold_right (fun f acc -> f acc) fun_list (fun x -> x)
到
List.fold_right (fun f acc -> (fun x -> f (acc x))) fun_list (fun x -> x)
答案 1 :(得分:0)