こんにちは、私は Haskell の初心者で、本当に迷っています。これは私の課題であり、高次関数を使用して以下のようなことをするように求められます
Main> mySort (<) [1,5,3,6,4,1,3,3,2]
[1,1,2,3,3,3,4,5,6]
Main> mySort (>) [1,5,3,6,4,1,3,3,2]
[6,5,4,3,3,3,2,1,1]
Main> mySort longerWord [“Hello”, “The”, “a”, “Daniel”, “Declarative”]
[“Declarative”, “Daniel”, “Hello”, “The”, “a”]
まず、<、>、それより長いかを区別する関数を作ろうと思いましたWord
checkConditionStr::String->Int
checkConditionStr str
|str=="(<)" =1
|str=="(>)" =2
|str=="longerWord" =3
しかし、この例には引用符がありません (つまり、mysort (<) は my sort"(<)" ではありません)。これが最初の問題です。この関数を作成しましたが、コンパイルされていません。
checkCondition::Ordering->Int
checkCondition ord
|ord==(<) =1
|ord==(>) =2
|otherwise =2
第二に、私はまだ高階関数を理解するのに苦労しています。これは理にかなっていますか?
mySort::(String->Int)->[a]->[a]
mySort i list
|i==1 map (sortBy compare) list
|i==2 map (sortBy(flip compare)) list