2016-09-24 87 views
-2

我有这样如何在haskell中调用此函数?

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool 

一类的功能,但我不能把它。任何人都可以给我一个例子:例如,用一个例子来实现一个bc的功能?

+0

如果你能描述这个函数做了什么以及它的每个参数是什么意思,它可能会有所帮助。 – Javran

回答

1

它看起来像你有一些复杂的函数,使用辅助函数检查关联列表中的成员资格。

功能您提供:

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

1

该类型是如此普遍,以至于很难推断函数的实际功能。然而,由于abc,并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的配对清单。