1
私は毎週の大学の割り当てのためにhaskellで挿入のソートを実装しようとしています。これは私のインサートとソート機能である:指定された順序でHaskellのInsertionsort
insert :: (Ord a) => a -> [a] -> [a]
insert a [] = [a]
insert a (a':as)
| a <= a' = a:a':as
| otherwise = a':insert a as
insertionSort :: (Ord a) => [a] -> [a]
insertionSort [] = []
insertionSort (a:as) = insert a (insertionSort as)
これは動作しますが、私の家庭教師はそうのような署名を指定:iを試してみました
insert :: (a -> a -> Bool) -> a -> [a] -> [a]
insertionSort :: (a -> a -> Bool) -> [a] -> [a]
すべてが今失敗し、コンパイラエラーはどちらか本当に参考になっていません。あなたたちがこれで私を助けてくれることを願っています!
編集:
与えられた例私の家庭教師によってはそうのようになります。
Main> insert (<) 3 [1,2,5,7,9]
[1,2,3,5,7,9]
Main> insSort (>) [7,9,1,2,5]
[9,7,5,2,1]
ありがとうございました!私は(Ord a)、(>)と(a-> a Bool)はすべて同等であると読んでいます。あれは正しいですか?そしてもしそうなら、あなたはなぜ(insert ::(a-> a-> Bool)の代わりに(insert ::(a-> a-Bool) - > a ...) > a ...)? – GabbaGandalf
@ GabbaGandalfどれも同等ではありません。 '(Ord a)=> ...'は、注文可能なデータ型である必要があると述べています。 '(>)'は関数です。これは '(\ a b - > a> b)'と同じです。最後に '(a - > a - > Bool)'は型記述です。これは 'a'型の2つの値をとり、' Bool'を返す関数を記述します。 –
ありがとう、よく知っておいてください。だから、ステートメント(Ord a)=> ...は実行時エラーを防ぎますか? – GabbaGandalf