function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
一类的功能,但我不能把它。任何人都可以给我一个例子:例如,用一个例子来实现一个bc的功能?
function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
一类的功能,但我不能把它。任何人都可以给我一个例子:例如,用一个例子来实现一个bc的功能?
它看起来像你有一些复杂的函数,使用辅助函数检查关联列表中的成员资格。
功能您提供:
function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
有三个参数:
a
元素,b -> c -> a
,b
参数,[(d, c)]
。然后,所提供的类型的一种可能的功能为:
function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
function a f b ((_,c):rest) = ((f b c) == a) || (function a f b rest
function a f b rest = False
一个成员列表通过忽略元组的第一个元素和施加所述辅助函数到第二它检查,元组的参数。
虽然功能看似复杂,你可以在一个相当简单的例子
function True (==) 0 [("a", 0), ("b",1)]
在上面的例子中,我们使用的是(==)
辅助函数寻找0
运行它,我们检查的辅助功能返回True
。
该类型是如此普遍,以至于很难推断函数的实际功能。然而,由于a
,b
,c
,并d
有一些限制,我们提供了一个例子,他们也都发生在满足Int
:
function (3::Int) (+) 5 [(1,2), (3,4)]
第一个参数必须是a
类型,唯一的限制是它成为Eq
的一个实例。 3 :: Int
满足该要求。
第二个参数只需要是一个返回Int
的双参数函数。 (+)
满足该要求,同时修复b ~ c ~ Int
。
第三个参数也必须是b ~ Int
。
对于任何类型d
,最后一个参数只需要是类型为[(d, Int)
的列表]。我们将通过一份Int
s的配对清单。
如果你能描述这个函数做了什么以及它的每个参数是什么意思,它可能会有所帮助。 – Javran