Haskell(a->;a->;Bool)函数定义

Haskell(a->;a->;Bool)函数定义,haskell,Haskell,嗨,我是haskell的新手,我在函数定义方面遇到了困难。在作业中,我需要使用此函数 insort :: [a] -> (a -> a -> Bool) -> [a] insort [] _ = [] insort (x : xs) f = ins x (insort xs f) where ins x [] = [x]

嗨,我是haskell的新手,我在函数定义方面遇到了困难。在作业中,我需要使用此函数

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)

谢谢你的帮助

第二个参数应该是一个接受
a->a->Bool
的函数,比如大于。此函数将在列表中的每个元素中调用

您应该像这样使用它:


insort[1,2,3,4,5,6](>)
insort的第二个参数的类型为
(a->a->Bool)
。这是一种函数类型,它接受两个
a
,并返回一个
Bool
。这里的
a
Int

表达式
4>3
(它只是
(>)43
)的语法糖)只是类型
Bool
。可怜的家伙

您需要将
(>)
函数传递到

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

在[1,2,3,5,6](>)中有一个相关的问题:除了
常量之外,还有其他函数吗。常量真值
常量。const False
完成签名
a->a->Bool
而无需进一步限定?在[1,2,3,4,5,6](4>3)
应该做的事情中,你感觉如何?@kqr No。对
a
没有边界的参数函数根本无法查看给定的值,也没有其他可供决定的依据,因此,我们必须始终给出相同的答案。