首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以布尔函数传递为参数的fold_left插入排序

以布尔函数传递为参数的fold_left插入排序
EN

Stack Overflow用户
提问于 2017-11-07 21:14:50
回答 1查看 207关注 0票数 0

我想使用fold_left编写简单的插入排序函数,但我也想传递函数,该函数将指定排序乐趣中的顺序。我不知道的是,如何把它传递给fold_left。

代码语言:javascript
复制
let rec insert f l e = 
match l with
    | [] -> [e]
    | h :: t -> if f e h then h :: insert f t e else e :: l;;

let insertion_sort f l = List.fold_left insert f [] l;;

let less x y = x < y;;

let result = insertion_sort less  [2 ; 5 ; 1 ; 9 ; 7 ; -2 ; 0 ; 124];;

这就是我所说的,但fold_left不接受这个解决方案。当我对排序函数进行专门化时,它就工作得很好。

代码语言:javascript
复制
let insertLess = insert less;;

let insertion_sortLess l = List.fold_left insertLess [] l;;

let result = insertion_sortLess [2 ; 5 ; 1 ; 9 ; 7 ; -2 ; 0 ; 124];;
#   val result : int list = [124; 9; 7; 5; 2; 1; 0; -2]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-07 21:21:47

List.fold_left insert f ...insertf作为单独的参数应用于List.fold_left。您需要的是List.fold (insert f) ...,它将f应用于insert,然后将其应用于List.fold_left

编辑:此外,您不需要定义less。您可以将>作为一个函数直接传递给它,方法是在圆括号中包围它:insertion_sort (<) ...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47167562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档