パターンマッチングについて質問があります。
どういうわけか(string ++ [char] ++ anotherstring)と一致させることは可能ですか?
私は次のようなことを試しました:
f (s++";"++r) = s++r (the rhs is trivial, but its just for testing ;))
ただし、これにより解析エラーが発生します。
パターンマッチングについて質問があります。
どういうわけか(string ++ [char] ++ anotherstring)と一致させることは可能ですか?
私は次のようなことを試しました:
f (s++";"++r) = s++r (the rhs is trivial, but its just for testing ;))
ただし、これにより解析エラーが発生します。
いいえ、できません。パターンマッチングは、構築されたコンストラクターに従って値を分解するため、パターンマッチングでコンストラクターアプリケーションを使用して、パターンに一致する値と一致しない値を記述することしかできません。
あなたの例のようなものでは、case
うまくいきます、
f str = case break (== ';') str of
(s, _:r) -> s ++ r
_ -> error "No semicolon found"
完全を期すために、GHCのViewPatterns
拡張機能を無償で使用し、DanielFischerの例を次のように書き直すことができます。
{-# LANGUAGE ViewPatterns #-}
f (break (== ';') -> (s, _:r)) = s ++ r
f _ = error "No semicolon found"
もちろん、これは純粋に表面的な変更ですが、case
式ではなく通常の「方程式のグループ」構文を使用したい場合は、それがあります。
NB-私は現在GHCを手元に持っていないので、実際に上記をテストしていません。
いいえ、できません。あなたがやろうとしていることを達成するためにあなたが使うことができる分割された多くの機能があります。
ここで提案されている方法と同様に、この種のパターンマッチングを実行できます。