functional-programming - 使用 fold 将函数列表合并为单个函数
问题描述
假设我有一个函数列表
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] ;;
使用折叠,我想获取这个函数列表并将它们组合成一个函数。就像是,
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 -> '一个)
解决方案
我已经通过更改第二行代码解决了这个问题
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)
推荐阅读
- python - Pandas Dataframe - 添加显示满足条件的行数的列
- c# - 如何将元数据添加到 ASP.NET 端点
- javascript - 如何解析和翻译包含相同部分的单词的字符串
- javascript - React Native 发布构建崩溃问题,但在调试时它工作正常
- oracle - Spark SQL 在 Oracle 上将整数写为 NaN
- python - 在 Django Rest Framework 中使用外部 api rest 模拟测试
- javascript - 将通过按钮传递的 id 绑定到 Jquery 中的数据
- react-native - react native如何设置环境变量
- youtube-data-api - Youtube 数据 V3 导致 403
- react-native - setState 不更新状态变量 - React Native 钩子