2013-02-13 15 views
7

"あなたの教科書で見つけてください"と言うかもしれない大虐殺に、あるいは "Hoogle it"と言いました。ハスケルでは(== "")はどういう意味ですか?

私はそれが私にブールのいくつかの並べ替えのように見えますが、私はよく分からない文の間で

recipe = (== "000001")

が来ました。私はGHCiでさまざまな方法でテストしようとしましたが、うまく動作するものは見つけられませんでした。 は、誰かがそれが何を意味するのか説明でき、そしてこの質問は次回誰かが(\y -> y @ x)を意味するであろうバイナリ演算子@表現(@ x)についてハスケル(==」「)を

+3

'この質問は次回誰かがGoogleの検索結果になるでしょう。「Haskell(==「いいえ、それはできません。Googleは "Haskell(=="はグーグル "Haskell"と同じです)を検索して句読点を無視します。これは検索の際に何も役に立たなかった理由を説明しています – sepp2k

+0

文字列の等価性をチェックしています。 >レシピ "000001"と返すとTrueが返されます –

+0

@ sepp2k興味深いのは...私はGoogleにこのようなことをどのように説明できますか? – CodyBugstein

答えて

11

GHCIを使用すると、これを把握できます。

GHCIには、let recipe = (== "000001")を入れます。今、それがどのように機能するかを見ることができます。タイプが何であるか見るには:t recipeを試してください。それはrecipe :: [Char] -> Boolを返すので、これはCharString)のリストをとり、を返す関数のようです。

テストすると、"000001"以外の入力に対してはFalseが返されます。

==は演算子なので、1つの引数に部分的に適用でき、もう一方の引数をとり、結果を返す関数を返します。したがって、ここで== "000001"は、==の反対側を埋めるために1つの引数をとり、その結果を返す関数を返します。


編集:定義がrecipe = ((==) "000001")の場合、この説明は正しいと思われます。

これを理解するには、partial applicationを検索する必要があります。 ==関数の型はa -> a -> Boolであり、同じ型の2つの引数をとり、Boolを返す関数です。

a -> (a -> Bool)の関数でもあり、タイプaの1つの引数をとり、a -> Boolの新しい関数を返します。それがここで起こっていることです。 1つの引数を==に指定しました。このため、この特定のケースでは、タイプa -> Boolまたは[Char] -> Boolの新しい関数が返されました。

+0

それはカッシングではありません。まあ、直接ではない –

+3

いいえ、ここで起こっていることではありません。 '(== foo)'は最初の引数ではなく '=='の*引数を修正します。だから引数をつけて '=='を呼び出すだけではありません。 – sepp2k

+0

ああ、私の悪い、私はそれを修正します。 –

7

グーグル結果になります。

あなたの場合は(\y -> y == "000001")になります。関数は、Stringをとり、それが"000001"に等しいと言うならば。

5

(== arg)または(arg ==)はオペレータセクションです(これは他の演算子でも同様に使用できます - ==ではなく)。それは、オペランドを指定されたオペランドに部分的に適用することです。従って(== "foo")\x -> x == "foo"と同じです。

28

sectionです。これはrecipe = \x -> x == "000001"(これはrecipe x = x == "000001"と同じです)に相当します。

関連する問題