12

私はグーグルを試しましたが、不足しています。いくつかの記事を読んで Haskell の知識を深めているところ、見たことのない構文を使用している記事に出会いました。例は次のとおりです。

reconstruct node@(Node a b c l r) parent@(Node b d le ri)

私はこれらの @ を見たことがありません。答えをオンラインで検索しようとしましたが、不足していました。これは単純にタグを埋め込んでわかりやすくする方法ですか? それともコードに実際に影響を与えますか?

4

2 に答える 2

22

It is used in pattern matching. Now node variable will refer to the entire Node data type for the argument Node a b c l r. So instead of passing to the function as Node a b c l r, you can use node instead to pass it up.

A much simpler example to demonstrate it:

data SomeType = Leaf Int Int Int | Nil deriving Show

someFunction :: SomeType -> SomeType
someFunction leaf@(Leaf _ _ _) = leaf
someFunction Nil = Leaf 0 0 0

The someFunction can also be written as:

someFunction :: SomeType -> SomeType
someFunction (Leaf x y z) = Leaf x y z
someFunction Nil = Leaf 0 0 0

See how simpler was the first version ?

于 2015-05-19T12:59:28.440 に答える