2014-01-31 2 views
0

Привет, я новичок в haskell и у меня с трудным временем с определением функции. В назначении мне нужно использовать эту функциюОпределение функции Haskell (a -> a -> Bool)

insort :: [a] -> (a -> a -> Bool) -> [a] 
insort [] _  = [] 
insort (x : xs) f = ins x (insort xs f) 
         where 
         ins x [] = [x] 
         ins x (y : ys) = if (f x y) 
              then x : y : ys 
              else y : ins x ys 

, но я не могу выяснить, как использовать его .. для меня это кажется, что я должен быть:

insort [1,2,3,5,6] (4 > 3) 

и благодарит вас за ваша помощь!

+3

insort [1,2,3,5,6] (>) – jcarpenter2

+0

Связанный вопрос: Есть ли какая-либо функция, кроме 'const. const True' и 'const. const False' выполняет подпись 'a -> a -> Bool' без дополнительной квалификации? – kqr

+0

Что вы чувствуете как 'insort [1,2,3,4,5,6] (4> 3)' должен делать? –

ответ

6

Второй аргумент должен быть функцией, которая принимает a -> a-> Bool, скажем, больше. Эта функция будет называться каждым элементом в списке.

Вы должны использовать его как:

insort [1, 2, 3, 4, 5, 6] (>)

5

Второй аргумент insort имеет тип (a -> a -> Bool). Это тип функций, которые принимают два a и возвращают Bool. Здесь a - Int.

Выражение 4 > 3 (который является просто синтаксическим сахаром для (>) 4 3) имеет тип Bool. Бедняга.

Вам необходимо передать (>) функции на номер insort.

insort [1, 2, 3, 4, 5, 6] (>) 
Смежные вопросы