問題タブ [meta-predicate]
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.
list - 複数のリストからアイテムを削除する
解決策が必要と思われるものよりもはるかに大きい副問題があります。
問題は次のように定義されます
グループが Y と Z または A と B の間の ID を持つすべてのグループから X を削除します
Y、Z、A、B を 0、1、3、4 に設定した疑似クエリとして表現すると、次のようになります。
結果は次のようになります。
したがって、これに対する私の解決策は次のとおりです。
現在の期間の開始が現在の期間の終了よりも小さいか等しい場合、X をグループで削除し、開始日を「増分」します。生理がなくなるまで繰り返す
グループ内の X の削除は、すべてのグループを「ループ」してピリオドと一致するかどうかを確認することによって行われ、一致する場合はサブグループからユーザーを削除します。これも「ループ」によって行われます。
これは非常に面倒ですが、簡単な解決策です。現在、私の問題は、このようなことを頻繁に行っていることに気づき、包括的でない方法でこれを行うためのアプローチを見つけることができないことです。
50行以上をカバーしない私のアプローチ以外のアプローチはありますか?
更新しました
どうもありがとう、コードはとてもきれいになりました - もっと先に進むかもしれませんが、実際にここに投稿することが可能になりました (これは少し変更されています - しかしロジックはそこにあります)
prolog - Prolog =..述語の使用
=.. 述語を使用して、PredName(X) が失敗した List 内のすべての要素を削除し、残りのリストを Result として返す手順を記述しようとしている演習に取り組んでいます。
この場合、PredName は次のように定義されます。
例えば:
私は次のものを持っていますが、上記の例でテストしたときに結果として false になり続ける理由がわかりません:
上記のコードはhereから取得しました。
prolog - 部分的なリストを折りたたむ
これは、この質問に対する既に削除された回答によって引き起こされた質問です。この問題は次のように要約できます。
折りたたみ中に生成されたリストの末尾を使用して、リストを折りたたむことは可能ですか?
これが私の言いたいことです。階乗を計算したいとします (これはばかげた例ですが、デモンストレーション用です)。次のようにすることにします。
ここで、 に与えるリストを生成する必要がありfoldl
ます。ただし、定数メモリで同じことを行うことができます (リストを生成せず、 を使用せずにfoldl
):
ここでのポイントは、 を使用するソリューションとは異なりfoldl
、これは定数メモリを使用することです。すべての値を含むリストを生成する必要はありません!
階乗の計算は最良の例ではありませんが、次に来るばかげたことを理解するのは簡単です。
私がループ (および再帰) を本当に恐れているとしましょう。それでもリストは必要です。だからここに私が試すかもしれないものがあります:
驚いたことに、これは意図したとおりに機能します。部分リストの先頭にある初期値で折り畳みを「シード」し、現在の先頭を消費しながら次の要素を追加し続けることができます。の定義は、上記fac_foldl/4
の定義とほとんど同じですfac_b_1/4
。唯一の違いは、状態の維持方法が異なることです。ここでの私の仮定は、これは定数メモリを使用する必要があるということです:その仮定は間違っていますか?
これがばかげていることはわかっていますが、折り畳みがいつ開始されるかがわからないリストを折り畳むのに役立つ可能性があります。元の質問では、xy 座標のリストを指定して、接続された領域を見つける必要がありました。xy 座標のリストを 1 回折りたたむだけでは十分ではありません (ただし、2 つのパスで実行できます。同じウィキペディアの記事で参照されているより良い方法が少なくとも 1 つあることに注意してください。ただし、これも複数のパスを使用します。全体として、マルチパス アルゴリズムは、隣接するピクセルへの一定時間のアクセスを前提としています!)。
元の「地域」の質問に対する私自身の解決策は次のようになります。
上記と同じ「テクニック」を使用して、これをひねって折り畳むことができます。
これも「効く」。上記のように終了条件を明示していないため、折り目は選択ポイントを残します。そのfac_foldl/4
ため、その直後にカットが必要です (醜い)。
質問
- リストを閉じてカットを削除するきれいな方法はありますか? 階乗の例では、追加情報があるため、いつ停止するかがわかります。しかし、2 番目の例では、リストの後ろが空のリストであることをどのように確認すればよいでしょうか?
- 私が見逃している隠れた問題はありますか?
- これは、DCG を使用した Implicit State とどこか似ているように見えますが、それがどのように機能するのかまったく理解できなかったことを認めなければなりません。これらは接続されていますか?
prolog - call/2 の先頭に引数リストを追加できますか?
call(Goal,Arg)を使用すると、引数 Arg を Goal の引数に追加し、結果のゴールを呼び出すことができます。
と同じです
ただし、引数リストに追加したくはありませんが、代わりに先頭に追加します。
結果として
ゴールの引数のリストに引数を追加して、結果のゴールを呼び出すにはどうすればよいですか?
prolog - Sicstus Prolog の CSP でペア変数のドメインを設定する方法
私は Sicstus Prolog を使用しており、ドミノ パズルを解こうとしています。
ドメインを設定する必要があるトリプレットのリストがあります。単一変数または単一変数のリストのドメインを設定する方法は知っていますが、リストにトリプレットがあり、トリプルの各要素が異なるドメインを持っている場合、どうすればよいでしょうか?
私がやりたいことはこれです:
各変数を明示的に指定せずにこれを行うにはどうすればよいですか?