私はこのどのように私はこの関数をhaskellで呼び出すことができますか?
function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
のようなタイプの機能を持っているしかし、私はそれを呼び出すことはできません。誰かが私に例を挙げることができますか?
私はこのどのように私はこの関数をhaskellで呼び出すことができますか?
function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
のようなタイプの機能を持っているしかし、私はそれを呼び出すことはできません。誰かが私に例を挙げることができますか?
ヘルパー機能を使用して関連付けリストのメンバーシップをチェックするやや複雑な機能があるようです。
機能は、あなたが提供:
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
を返します。
このタイプは非常に一般的なので、関数が実際に何を行うのかを判断するのは難しいです。しかし、a
、b
、c
、および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
のペアのリストを渡すだけです。
この機能が何をしているのか、それぞれの引数が何を意味しているのかを説明すると役に立ちます。 – Javran