2016-09-24 86 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的配對清單。