2011-04-01 115 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中放置的幾個查詢溢出?