14

彼らは正確に何をしますか?@ (パターン マッチの開始時に名前を割り当てる) の 1 つの可能な使用法を知っていますが、~ で何も見つけることができませんでした。

http://www.haskell.org/haskellwiki/Prime_numbersから取得した次のコード スニペットでそれらを見つけましたが、この記事では、Haskell 構文に精通していることを前提としており、難解な演算子については説明していません ( ' sieveの宣言の開始について混乱しています):

primesPT () = 2 : primes'
  where 
    primes' = sieve [3,5..] primes' 9
    sieve (p:xs) ps@ ~(_:t) q
       | p < q   = p : sieve xs ps q
       | True    =     sieve [x | x<-xs, rem x p /= 0] t (head t^2)

ここで使用されている構文に関する説明 (または説明へのリンク) をいただければ幸いです。

4

2 に答える 2

11
于 2011-09-21T21:19:40.273 に答える
9

これはレイジー パターン マッチです (反駁不可能なパターン マッチとしても知られている方が適切な名前だと思います)。

基本的に~(_:t)、入力が空のリストであっても、常に一致します[]。もちろん、何をしているのかわからない場合、これは危険です。

Prelude> let f ~(_:t) = t in f []
*** Exception: <interactive>:1:4-15: Irrefutable pattern failed for pattern (_ : t)
于 2011-09-21T21:19:01.073 に答える