Eve*_*lse 1 ocaml functional-programming list fold
假设我有以下两个列表:让a = [1; 2; 3; 4] ;; 设b = [1; 3; 5; 7] ;; 我想要一个包含a和b的索引方式总和的第三个列表; 即让c = [2; 5; 8; 11] ;;
问题是如何仅使用List.fold_right,List.fold_left和/或List.map中的函数来执行此操作?(这是一个家庭作业问题,所以我不允许使用递归函数或@.)
由于这是一个家庭作业问题,我们实际上只能给出提示.
假设您想使用List.map.类型List.map是('a -> 'b) -> 'a list -> 'b list.换句话说,它在一个列表上工作.如果您想用它来解决您的问题,您必须找到自己的方法将两个列表合并到一个列表中.您无法使用List.map此操作,无论您如何组合列表,都可以为您添加.所以这看起来并不乐观.
现在让我们说你想用List.fold_left.类型List.fold_left是('a -> 'b -> 'a) -> 'a -> 'b list -> 'a.关于折叠的好处是它允许您携带任意类型的累积状态'a.并且它允许您在处理列表时对此累积状态执行任意修改.
在我看来,当你通过折叠处理另一个列表时,你可以将你的一个列表视为这个累积状态的一部分.