3

私がこのようなコードを持っているとしましょう:

test pattern
 | pattern == (_,NOT (WIRE _)) = 1     
 | pattern == (_,AND (WIRE _) (WIRE _)) = 2
 | otherwise = 0

私がそれをいくつかの可能性の1つと一致させようとしているところ、いくつかは1つ(WIRE "")、いくつかは2つです。実際の入力は次のとおりです。例:( "p"、NOT(WIRE "x"))。任意の文字を入力として受け入れることができ(_で期待していたもの)、陰気に失敗している(違法な_)パターンが欲しいです。haskellでこれを行うことは可能ですか?

4

2 に答える 2

7

OK、これは編集後の方がずっと理にかなっています。

==を比較しますが_パターンです。パターンは、次の構文コンテキストでのみ表示されます。

  • (パターン) バインディングの左側、つまり「前にあるもの=」、トップレベル、whereブロック内、let式またはコマンド (do表記法)。
  • 表記法またはリスト内包表記<-の左側。do
  • ->式の左側case
  • 関数バインディングまたはラムダ ( \) 式のいずれかで、関数の正式な引数として。

(忘れていないことを願っています!)あなたの場合、単に書くだけであなたが望むものを達成できます

test (_, NOT (WIRE _)) = 1
test (_, AND (WIRE _) (WIRE _)) = 2
test _ = 0

" " の正しいバージョンは何かと尋ねるかもしれませんpattern == (_, NOT (WIRE _))。さて、あなたは書くことができます:

case pattern of
  (_, NOT (WIRE _)) -> True
  _ -> False
于 2010-09-27T05:24:00.493 に答える
0

なぜこれに警備員が必要なのですか?何か不足していますか?以下は、あなたが探していると思われる正当な Haskell コードです。

test (_,NOT (WIRE _)) = 1     
test (_,AND (WIRE _) (WIRE _)) = 2
test _ = 0
于 2010-09-27T05:21:05.470 に答える