問題タブ [prolog]

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.

0 投票する
2 に答える
3446 参照

prolog - Prolog での単純なグラフ検索

SWI-Prolog で簡単なグラフ検索をコーディングしようとしています。私は次のプログラムを思いつきました:

しかし、このプログラムはスタック オーバーフローを引き起こします。私は何を間違っていますか?どうすれば修正できますか?

0 投票する
2 に答える
356 参照

prolog - Prolog方言Provaのドキュメント

SWI-PrologからProvaに切り替えたいのですが、予想より難しいようです。

のような述語succ()は使用できず、のような操作は機能Var1+Var2>Var3しません(明らかにVar3<Var1+Var2有効である必要があります)。

Prolog方言の違いを説明する利用可能なドキュメントはありますか?

0 投票する
1 に答える
293 参照

conditional - Prolog条件付き評価なし

私は単純に次のようなプロローグで条件付きを実行しようとしています:

((Life == dead)-> Trans = no)。

上記のコードは、Life ==デッド、次にTrans = noのように評価されると思いましたが、何らかの理由でそうではありませんか?ありがとう。

0 投票する
3 に答える
975 参照

prolog - リストを括弧なしの 1 つの要素としてスタックにプッシュします

のようなリストに要素のリストが[1,2,+]あり、それらを 1 つの要素としてスタックにプッシュしたいと考えています。角かっこの間に入れることでそれを行うことができますが、これにより出力に角かっこが表示されます。たとえば、リスト [1,2,+] の要素をスタックにプッシュしたいとします。

どこstackにある:

問題は、より多くの式をスタックにプッシュすると、ネストされたブラケットが作成されることです。たとえば、 を取得しますが[[+,1,2],[*,3,4]]、 が必要です[+,1,2,*,3,4]。どうすればこれを達成できますか?

0 投票する
2 に答える
265 参照

list - プロローグ アラインメントの述語

アラインメントとは、述語が 2 つのリストを受け取ることを意味します。そして、配置リスト内のすべての項目が実際に他の両方のライトの要素であることを確認します。また、順序に関する要件があるため、配置リスト内のすべての項目が他の両方の入力ライトのメンバーであることを確認するだけでは除外されます。メンバーをチェックするだけでは、有効な配置は反転しても有効になります。もちろん、これは間違っています。

ここでは 8,2 と 8,9 は無効です。

実際にどのように順序をチェックするかを考えると、命令型言語のプログラミングに頭が下がります。どんな入力でも大歓迎です。しかし、すぐに答えを出さないでください。何について読むべきかについてのヒントが欲しいのです。(これを言わなければならないのは、私がこのサイトで非常に良い助けを得ているので、これを指摘しないとあまりにも不正行為に近いからです)。

私の考えでは、 I または prolog は、現在の要素のインデックスの後に検索を続行する必要があります。それは逆アラインメントを無効にしますか?

編集:両方のリストで現在の要素のインデックスの後に、検索を続行する必要があります。上記の例のように、2 が見つかると、インデックス 2 とインデックス 5 で次の要素の検索を開始します (最初の要素は 1 です)。

0 投票する
6 に答える
6489 参照

list - リストのリストで最も長いリストを見つけるにはどうすればよいですか?

リストのリストがあり、それらの中で最も長いリストを見つける必要があります。同じ長さのものが複数ある場合、返されるものは同じです。ありがとう。

0 投票する
2 に答える
214 参照

list - プロローグ 独自に機能する述語の結合に関する問題

ほら、我慢して。全体的な目標は、2 つのリスト間の最大の配置を返すことです。同じ長さのアラインメントが複数ある場合は、最初のものを返すことができます。

アラインメントとは、2 つのリストが共有する要素を正しい順序で共有することを意味しますが、必ずしも順序どおりである必要はありません。1,2,3 および 1,2,9,3; ここでは、1,2,3 が最長のアラインメントになります。誰でも、私がすでに定義した述語を知っています。

次に、組み込みの述語 findall を使用して、これらのリスト間のすべてのアラインメントのリストを取得しますか? この場合、最大のアラインメントが最初に配置されますが、その理由はわかりません。

それは以下を返します;

その通りですが、これら 2 つを組み合わせて、リストのリストの中で最大のリストを返す述語が必要です。

0 投票する
4 に答える
486 参照

prolog - Prolog パス検索ポインター

パスが有効か、真か偽かを確認する必要があります。次のように与えられます。

リストの部分で、(a,c) の a または c にアクセスするにはどうすればよいですか? 文字列「(a,c)」のようなものですか?

そして、一般的に、このタイプの経路探索をどのように解決するのでしょうか? サンプルコード/疑似コードは大歓迎です。リスト内のタプル () を述語として解釈させる方法はありますか?

0 投票する
3 に答える
8203 参照

loops - 変数の結果をループするプロローグ

私は Prolog で書かれた小さなプログラムを持っています。現時点では、最初の結果を印刷できます

しかし、X の結果が複数ある場合、次の結果を出力するにはどうすればよいでしょうか?

ありがとう。

0 投票する
5 に答える
3531 参照

prolog - プロローグ句で定義された最大値

Prolog でリストを繰り返し処理して最大値を見つける方法は知っていますが、それぞれが個別の節である場合はどうなるでしょうか? たとえば、猫とその年齢がたくさんある場合、どのようにして最年長の子猫を見つけますか?

私が最初に思ったのは、「うーん、最年長の猫は年長者がいない猫だ」ということでした。しかし、プロローグにうまく翻訳できませんでした。

これはまだ誤って「misty」と一致します。これを行う適切な方法は何ですか?最大を選択するために、より直接的に年齢を反復する方法はありますか?