問題タブ [pattern-matching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - 単語を含まない行に一致する正規表現
単語を一致させてから、他のツール(例)を使用して一致を逆にすることが可能であることを私は知っていますgrep -v
。hede
ただし、正規表現を使用して、特定の単語を含まない行を照合することは可能ですか?
入力:
コード:
必要な出力:
language-agnostic - ソースコードをパターンマッチングして書き換えるソフトウェアはありますか?
ソースコードの基本的なパターンマッチングと書き換えシステムを実装する古いソフトウェア (死んでいないが、私には死んでいる言語で ;-)) があります。このコードを復活させ、現代の言語に翻訳し、プロジェクトをリファクタリング パワー ツールとしてオープンソース化することを検討しています。さらに先に進む前に、このようなものがすでに存在するかどうかを知りたいです (今夜、私の google-fu がこれを煽っています)。
仕組みは次のとおりです。
- パターン マッチング部分は、バインディング変数を含むテンプレートを使用して、複数行のコードにまたがるソース コード パターンと一致します。
- パターン書き換え部分は、テンプレートを使用して一致したコードを書き換え、一致するテンプレートからバインドされた変数の内容を挿入します
- 一致テンプレートと書き換えテンプレートは、単純な (無条件の) 書き換えルールによって (1:1) 関連付けられます
ソフトウェアは、入力アプリケーションの抽象構文ツリー (AST) で動作し、変更された AST を出力します。これは、新しいソース コードに再生成できます。
たとえば、実際には for ループであるはずの while ループがたくさん見つかったとします。次のテンプレートは、while ループ パターンに一致します。
次のテンプレートは、出力の書き換えパターンを指定します。
それらを関連付ける簡単なルール
コードは次のようになります
このように自動的に書き換えられます
これに最も近いのはコード リファクタリング ツールの一部ですが、それらは大規模な自動変更ではなく、選択したスニペットのインタラクティブな書き換えを目的としているようです。
この種のツールはリファクタリングを促進し、複数の言語 (HTML/CSS でさえも) で動作すると信じています。また、コード ベースの変換と磨き上げは、私だけでは妥当な時間内に行うことのできない巨大なプロジェクトになると考えています。
それで、このようなものはすでにそこにありますか?そうでない場合、考慮すべき明らかな機能(書き換えルール条件以外)はありますか?
編集: このシステムの私が非常に気に入っている機能の 1 つは、テンプレート パターンがかなり明白で読みやすいことです。これは、テンプレート パターンが難解な変異正規表現/BNF 形式ではなく、ターゲット ソース コードと同じ言語で記述されているためです。
f# - 「二重の短所」パターン マッチをネストできますか?
追加の検証関数を通過する数字のみに一致するようにパターンを強化したいと考えています。
「One」の場合は簡単です。
「2」のケースは私には明らかではありません。数値の合計を検証する必要があります。when-guard を使わずにこれを行うことはできますか?
...
編集:次のような when-guard (bool を返す isValid 関数を使用) を使用できます。
これは単にパターンを一致させるよりもエレガントではありません。さらに悪いことに、a + b が 2 回適用されます。
また、これは私の実際のコードの簡略化されたバージョンであることに注意してください(たとえば、さまざまな長さのリストに対して単純に一致させようとしているわけではありません)-質問は、二重コンスパターンに対するネストされた一致に関するものです。
haskell - Haskellではどちらがより効率的です。パターンマッチングまたはネストされたif/caseステートメント?
Haskellでのパターンマッチングの効率に興味があります。パターンマッチングがネストされたif
/case
ステートメントよりも優れているという単純なケースは何ですか?
ご協力いただきありがとうございます。
haskell - Haskellでタプルを分解するとき、要素はどこで使用できますか?
次の例を使用するチュートリアルを読んでいます (多少一般化します)。
私の質問は、それらが取得されたタプルの外で名前でx
参照できるように見えるという事実にあります。bar
私の推測が正しければ、これは他の言語でパラメータリストを分解するように見えるでしょう。(つまり、次のことを行う必要はありませんでした:)
私はこの行動について正しいですか?私が読んでいるチュートリアル/本でまだ言及されているのを見たことがありません。誰かがこの件に関する詳細情報を教えてもらえますか?
編集:何か(リスト、配列など)を同様の方法で分解できますか、それともタプルでのみこれを行うことができますか?
algorithm - 信号 (音) の 1 つのクラス分類にはどのアルゴリズムを使用すればよいですか?
この質問を更新して、以前は「信号(音)パターン検出のための単純なアルゴリズムの名前を教えてください」
- 私の目的は、ノイズの多い信号で特定のパターンの存在を検出することです。マイクで音を録音している昆虫の種の存在を検出したい。以前、昆虫の音をデジタル形式で録音したことがあります。
- 私は音声認識をしようとしていません。
- 入力信号とパターンの間の畳み込みを使用して、それらの類似性レベルを判断しています。しかし、この手法は離散時間 (つまり、信号が一定の間隔で発生するデジタル通信) と、入力信号を 2 つの与えられたパターン (私は 1 つのパターンしか持っていません) の間で区別するのにより適していると思います。
- ニューラル ネットワークを使用したことがなく、そのコードを埋め込むことができるかどうかわからないので、使用するのが怖いです。
他のアプローチをいくつか教えてください。または、私の現在のアプローチが依然として良いアイデアであるか、ニューラル ネットワークが実行可能な方法である可能性があることを納得させてください。
更新私はすでに2つの良い答えを持っていますが、別の答えは歓迎され、報われることさえあります.
syntax - 'let'定義でパターンマッチングを使用するにはどうすればよいですか?
F#を使用すると、リテラルやその他のパターンでletバインディングを次のように使用できることに気づきました。
F#は、次の警告を表示するため、これらの関数を一種のパターンマッチングとして正しく解釈します。
警告1この式のパターンが不完全です。たとえば、値「1」は一致しません
警告2この式のパターンが不完全です。たとえば、値'[_]'は一致しません
等
これらの関数は期待どおりに機能しますが、完全なパターンマッチングを使用してこのスタイルで関数を定義したいのですが、F#マニュアルでこの代替パターンマッチング構文について何も見つかりません。
使用let whatever = function ...
しlet whatever x = match x with ...
て希望の結果を得ることができることはわかっていますが、パターンマッチングのさらに別の構文を発見したばかりであり、使用方法がわからないと永遠に悩まされます。
上記の代替パターンマッチング構文を使用して関数を作成するにはどうすればよいですか?
c++ - C++ での式の評価
宿題用に、Excel に似た C++ コンソール アプリを作成しています。私のアプリは、セルの数式を受け入れることができる必要があります。たとえば、次のように評価する必要があります。
また
また
また
そんな感じ。関数は、Sum、Ave、Sin、Cos、Tan、Cot、Mul、Div、Pow、Log (10)、Ln、Mod です。
それは哀れです、私は知っていますが、それは私の宿題です:'(
では、このようなものを評価するためのトリックを知っている人はいますか?
regex - 正規表現を適切に照合するにはどうすればよいですか?
ldapsearch
次のように出力されたオブジェクトのリストがあります。
これまでのところ、次の正規表現があります。
次のような結果が返されます。
次のような結果を返す正規表現が必要です。
cn=
パターン (およびコンマ) が結果に含まれないようにするには、正規表現で何を変更する必要がありますか?
編集:パターン マッチングを行うために使用sed
し、出力を他のコマンド ライン ユーティリティにパイプします。