2016-09-24 16 views
-2

私はこのどのように私はこの関数をhaskellで呼び出すことができますか?

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

のようなタイプの機能を持っているしかし、私はそれを呼び出すことはできません。誰かが私に例を挙げることができますか?

+0

この機能が何をしているのか、それぞれの引数が何を意味しているのかを説明すると役に立ちます。 – Javran

答えて

1

ヘルパー機能を使用して関連付けリストのメンバーシップをチェックするやや複雑な機能があるようです。

機能は、あなたが提供:

  • aを比較するための要素、
  • ヘルパー関数b -> c -> a、ヘルパー関数bため
  • 引数:

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

    は3つの引数を取ります、

  • タプル[(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はその要件を満たします。

2番目の引数は、Intを返す2つの引数を持つ関数である必要があります。 はその要件を満たし、一方b ~ c ~ Intも固定します。

第3引数の型はb ~ Intでなければなりません。

任意のタイプdの場合、最後の引数はタイプ[(d, Int)のリストである必要があります。 Intのペアのリストを渡すだけです。

関連する問題