問題タブ [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.
haskell - パターンマッチングが失敗したときにHaskellリスト内包がエラーを引き起こさないのはなぜですか?
私は、パターンマッチングに関して、Haskellリスト内包表記が「内部」でどのように機能するかを理解しようとしています。次のghci出力は、私のポイントを示しています。
ご覧のとおり、「Nothing」をスキップして「Just」の値のみを選択することができます。リストはモナドであり、次のように定義されていることを理解しています(Real World Haskell、ch。14からの出典):
したがって、リスト内包は基本的に、リスト内包で選択されたすべての要素に対してシングルトンリストを作成し、それらを連結します。あるステップでパターン一致が失敗した場合、代わりに「失敗」関数の結果が使用されます。つまり、「Just x」パターンが一致しないため、「concat」が呼び出されるまで[]がプレースホルダーとして使用されます。これが、「何も」がスキップされているように見える理由を説明しています。
私が理解していないのは、Haskellが「失敗」関数を呼び出すことをどのように知っているのかということです。それは「コンパイラの魔法」なのか、それともHaskellで自分で書くことができる機能なのか?次の「選択」関数を記述して、リスト内包表記と同じように機能させることはできますか?
pattern-matching - 2 つ以上の要約が類似しているかどうかの判別
問題は次のとおりです。
通常は 20 ~ 50 語の要約が 1 つありますが、これを他の比較的類似した要約と比較したいと思います。概要が参照する一般的なカテゴリと地理的な場所は、既にわかっています。
たとえば、同じ地域の人々が家を建てることについて書いている場合、ガレージや裏庭のプールを建てるのではなく、実際に家を建てることについて言及しているというある程度の確信を持って、それらの要約をリストできるようにしたいと思います.
現在、データ セットは約 50,000 ドキュメントで、1 日あたり約 200 ドキュメントの増加率です。
優先される言語は、Python、PHP、C/C++、Haskell、または Erlang のいずれかで、仕事を遂行できるものであればどれでもかまいません。また、差し支えなければ、特定の言語を選んだ理由を教えていただきたいです。
algorithm - 現在、2D ポイント マッチングの「最適な」アルゴリズムと考えられているものは何ですか?
(星の) xy 座標を含む 2 つのリストがあります。各星に等級 (明るさ) を付けることもできます。現在、各星にはランダムな位置のジグルがあり、各画像に余分なポイントや欠落しているポイントがいくつかある可能性があります. 私の質問は、「そのようなデータセットに最適な 2D ポイント マッチング アルゴリズムは何ですか?」です。単純な線形 (平行移動、回転、スケール) と非線形 (たとえば、座標の n 次多項式) の両方について推測します。ポイント マッチング分野の専門用語で言えば、ノイズとスプリアス ポイントを含む 2D ポイント マッチング プログラム間の銃撃戦で勝つアルゴリズムを探しています。ラベル付け情報が使用されているか (大きさ)、および/または変換が線形に制限されているかによって、異なる「勝者」が存在する可能性があります。
2D ポイント マッチング アルゴリズムには多くのクラスがあり、各クラスには多くのアルゴリズム (文字通りおそらく合計で数百) があることは承知していますが、もしあれば、どれが「最良」または「最も標準的」であると考えられるかはわかりません。コンピュータビジョンの分野の人々によって。悲しいことに、私が読みたいと思っている論文の記事の多くは、オンライン バージョンがなく、アブストラクトしか読むことができません。実装する特定のアルゴリズムを決定する前に、小麦と籾殻を区別するために数人の専門家から聞いてみるのが良いでしょう.
三角形を使用する動作中のマッチング プログラムがありますが、解決策の変換に明らかな歪みがあるものの、明確な理由がないため、頻繁に (約 5% の確率で) 失敗します。このプログラムは私が書いたものではなく、ほぼ 20 年前に書かれた論文からのものです。最も堅牢に機能する新しい実装を作成したいと考えています。私は、この分野でこれをもっともらしいものにするいくつかの進歩があったと想定しています (期待しています)。
php - データセットを既知のパターンと照合するためのクリーンで効率的な方法を探しています
php5.2とMySQL4.1.22の使用
私は、最初は単純に見えたが、それ以来、単純でクリーンな解決策に関して私を回避してきた何かに出くわしました。
製品の「パッケージ」が事前に定義されています。パッケージ1には、製品A、B、およびCが含まれている場合があります。パッケージ2には、A、C、D、Gなどが含まれている場合があります。パッケージのサイズは3〜5製品です。
これで、顧客は利用可能な10個の製品を選択して、「カスタム」パッケージを作成できます。すでに特定の事前定義されたパッケージがあるので、可能な場合は(出荷を容易にするために)既存のより小さなパッケージを使用してカスタムパッケージを構築したいと思います。
したがって、たとえば、顧客は製品A、B、C、D、E、およびFの「カスタムパッケージ」を作成することを選択します。Fooと呼ばれるA、B、およびCを含む事前定義されたパッケージがすでにあります。したがって、順序はFoo、D、E、およびFになります。
キャッチは、個々のアイテムの量が最も少なく、次にパッケージの量が最も少ないことです。例えば:
カスタムパッケージ:A、B、C、D、E、F、G、H、I、J。
事前定義されたパッケージ(1):A、B、C、D、E
事前定義されたパッケージ(2):A、B、C
事前定義されたパッケージ(3):D、E、F
単純に最大の一致を取る場合、1つの(5pc)パッケージと5つの個別のアイテムがあります。パッケージ(2)も(3)も残りのアイテムで構築することはできません。
もっと深く見てみると、パッケージ(1)をビルドしないことで、代わりにパッケージ(2)とパッケージ(3)をビルドできることがわかります。つまり、2つのパッケージと4つの個別のアイテムがあります(このビジネスルールではより適切な選択です)。
私はMySQLを使用しているので、(私の知る限り)サブセレクトの1つのレイヤーしか使用できないという制約を受けています。したがって、このソートはphpで実行する必要があります。array_intersect()を使用して一致を判別することを検討しましたが、事前定義されたパッケージの数が直線的に増加するにつれて、処理に関して私が見つけたすべての方法が指数関数的に増加します。
私はこれを他の数人のコーダーの友人によって実行しましたが、簡単な答えがあるはずですが、私たち全員が思ったほど単純ではないことがわかりました。なので、ここに素敵なヌードルストレッチャーとして投稿しようと思いました。よろしくお願いします!
scala - Seq[Char] として文字列に一致するパターン
Scala では、文字列を Seq[Char] として扱うことにより、文字列の個々の文字に基づいてパターンを定式化することができます。
この機能の例は、A Tour of Scalaに記載されています。
これはそこで使用されるコード例です:
}
これに関する問題は、スニペットの 3 行目です。
なぜこの種のキャストが必要なのですか?String は、すべての状況 (パターン マッチングを含む) で Seq[Char] のように振る舞うべきではありませんか? ただし、この変換がないと、コード スニペットは機能しません。
scala - 空の文字列が Seq.empty として一致しないのはなぜですか?
編集: これは、Scala 2.8 以降で修正されてから長い間、古いバグでした。
Pattern matching a String as Seq[Char] という質問に関するいくつかの実験中に、別の奇妙な一致現象に出くわしました。文字列を一連の文字として扱う次のコードを考えてみましょう。
空の String で input を呼び出すと、""
正しく生成され"Empty"
ます。
ただし、最初の一致句を次のように書き直すと、
の一致は""
失敗し、代わりに default 句に一致します。
Scala ライブラリのソース コードを見ていくと (理想的な世界では、これを行う必要はありません :-))、 と のSeq()
両方Seq.empty
がRandomAccessSeq.empty
. Seq()
どうやら、これは空の文字列のみに一致するため、上記の現象とは一致しません。
更新: さらに実験を重ねると、この質問は次のように絞り込むことができます。
これは基本的に、空Seq
が自動的に等しくないことを意味しますSeq.empty
。そのため、定数と照合する場合 (starblue が提案するエクストラクタを使用するのではなく)、この不等式は一致の失敗につながります。String
空をシーケンスとして解釈する場合も同様です。
performance - Scala のパターン マッチングはバイトコード レベルでどのように実装されていますか?
Scala のパターン マッチングはバイトコード レベルでどのように実装されていますか?
それは一連のif (x instanceof Foo)
構造のようなものですか、それとも何か他のものですか? そのパフォーマンスへの影響は何ですか?
たとえば、次のコード ( Scala By Exampleページ 46 ~ 48 から) が与えられた場合、eval
メソッドの同等の Java コードはどのようになりますか?
PS私はJavaバイトコードを読むことができるので、バイトコード表現で十分ですが、おそらく他の読者にとってはJavaコードとしてどのように見えるかを知っている方が良いでしょう.
PPS 本Programming in Scalaは、Scala がどのように実装されているかについて、これと同様の質問に答えていますか? 本を注文しましたが、まだ届きません。
erlang - 関数の引数に動的ビットパターンがないのはなぜですか?
私はErlangでビットパターンマッチングを実験しています:
コメントアウトされたバージョンをコンパイルするとtest/2
、「変数'P'はバインドされていません」という苦情が表示されます。最初のバージョンが2番目のバージョンと同じように機能しないようにする正当な理由はありますか?
regex - 引用符で囲まれたテキストの一致 (初心者)
主に、私が使用するすべてのサイトがパターンマッチングを行うためのさまざまなツールを提供しているため、シェルプログラミングに完全に夢中になっています。だから私の質問は、パイプストリームで単純なパターンマッチングを行うためにどのツールを使用するかです。
コンテキスト: named.conf ファイルがあり、さらに処理するために単純なファイルにすべてのゾーン名が必要です。だから私は ~$ cat named.local | ゾーンをgrepして、ここで完全に迷子になります。私の出力は、「zone "domain.tld" {」という形式の〜100行程度の改行であり、テキストを二重引用符で囲む必要があります。
これを行う方法を示してくれてありがとう。
J