2011-04-01 140 views
-2

我很难理解我的讲师希望我从这个问题做什么。任何人都可以向我解释他希望我做什么?高阶函数

定义插入排序算法的高阶版本。这是定义 功能

insertBy :: Ord b => (a->b) -> a -> [a] -> [a] 

inssortBy :: Ord b => (a->b) -> [a] -> [a] 

而且,该位是它让我困惑: 这样inssort F左排序列表L使得元素X自带的elementyif˚FX <˚F在y之前。

回答

1

如果您正在对数字进行排序,那么很明显x的意思是什么x <。但是如果你在分类信件呢?还是客户?还是其他没有明确(对电脑)订购的东西?

所以你应该创建一个函数f()来定义排序过程的顺序。那f()将采取信件或顾客或任何并且将返回一个整数为计算机可能实际上排序的每一个。

至少,这就是问题的描述。我个人会设计一个谓词,它接受两个项目x和y,并返回一个布尔值,如果x < y。但无论哪一个都没问题。

+1

实际上这个描述并没有提到任何关于整数的内容。在Haskell中'(>)'可以用于任何有序的类型(由类型'Ord'表示)。所以第一个参数只是一个把'a's变成有序'b's的函数。 – chris 2013-10-29 11:04:11

0

该代码希望您重写插入排序算法,但使用函数作为参数 - 因此是更高阶的函数。

我想指出,这段代码,包括错字,似乎源于目前在某所大学的工作 - 我发现此网页,同时搜索“插入排序algortihm”,因为我复制粘贴也包括错字在内的文字。

从互联网上搜索代码是一件冒险的事情。我可能会推荐插入排序算法的维基百科条目,或者在讲座幻灯片中提供的Haskell代码(您正在寻找“插入排序算法”和“高阶函数”),而不是您在Stack中放置的几个查询溢出?