問題タブ [logical-purity]

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 投票する
10 に答える
225422 参照

prolog - プロローグの「if」?

プロローグで if を実行する方法はありますか。たとえば、変数が 0 の場合、いくつかのアクションを実行します (端末にテキストを書き込む)。else は必要ありませんが、if のドキュメントが見つかりません。

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

prolog - \==/2またはdif/2を使用する

2つの変数が同じ用語にインスタンス化されないようにしたい場合、それを行うための好ましい方法は何ですか?

グラフで有向エッジを見つける必要があり、ノードがそれ自体にエッジを持つことができないとしましょう。

(ここでのエッジはa-> c、b-> aですが、c-> cではありません

次の作品:

これも機能します[swi-prolog]:

これは明らかに機能しません(AもBもまだインスタンス化されていないためですか?):

最初の解決策に関する私の問題は、より複雑なnode述語では、失敗する前に多くの不必要な統合が行われる可能性があることだと思いedgeます。一方dif、ライブラリ内にあるため、このような単純なケースで使用することを意図したものではないことを示しています(ただし、私が探しているように見える正確な機能を備えています)。

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

prolog - 優れた Prolog コードの特徴は?

優れた Prolog を作成するためにマスターしなければならない設計ヒューリスティックは何ですか? 経験豊富なプログラマーが Prolog に習熟するには、約 2 年かかると聞きました。再帰を効果的に使用することもその一部ですが、それは比較的小さなハードルのようです。プログラマーをこれほどまでに悩ませているのは、一体何なのでしょうか? その品質を判断するには、サンプル コードで何を探す必要がありますか?

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

prolog - 不純なプリミティブを使用する Prolog 述語の純度

とが不純なプリミティブであることは知っていますが、それらを使用すると、それらを使用するvar/1すべてのプログラムが不純になりますか?nonvar/1!/0

plus/3私は、あたかも純粋であるかのように振る舞う次の述語を書きました。述語は実証的であり、効率的に設計されていません。

2 つの質問があります。

  1. 上記の述語plus/3は本当に純粋ですか?
  2. 一般に、特定の関係が論理的に純粋であることをどのように証明できますか?

この質問は、この回答に関する議論に続きます。

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

prolog - when/2 と ground/1 の論理純度

質問

論理的純度に関する質問があります。

このプログラムは純粋ですか?

コンテキストに関する [irrelevant] の詳細

良い終了特性を持つ純粋な述語を書こうとしています。たとえばlist_length/2、リストとその長さの関係を記述する述語を書きたいとします。組み込みの predicate と同じ終了動作を実現したいlength/2

私の質問は、次の述語が純粋かどうかを調べようとしています。


で目標を達成できます...

... またはvar/1、 、nonvar/1andを使用できますが、述語が純粋であることを証明するの!/0困難です。

0 投票する
8 に答える
944 参照

prolog - different/2 - 純粋で確定的な定義は存在するか?

member/2andを使用したこの定義は、宣言的な観点からnon_member/2はほぼ完全ですが、特定のクエリに対して冗長なソリューションが生成され、選択ポイントがあちこちに残されます

これを改善する定義は何ですか (おそらく and を使用する純粋な方法if_/3(=)/3) によってまったく同じソリューションのセットが記述されdifferent/2ますが、少なくとも地上のクエリに対して決定的であり (したがって、無駄な選択ポイントを開いたままにしません)、省略します (可能であれば)冗長な答えはありますか?


1 実際、different([a|nonlist],[]), different([],[b|nonlist])成功します。同じように失敗する可能性があります。したがって、両方で失敗する解決策は問題ありません (おそらくさらに細かいことです)。

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

prolog - Prologの「論理的純粋性」とは何を意味しますか?

「論理的純度」(Prolog プログラミングのコンテキストで) とはどういう意味ですか? タグ情報には「ホーン節のみを使用するプログラム」と書かれていますが、それでは、述語はどのようにif_/3修飾されるのでしょうか。var/1つまり、低レベルのものです。

ある程度の「純粋な」効果が得られることはわかりますが、これは正確にはどういう意味ですか?

より具体的な例として、この回答if_/3などで使用されている論理的に純粋であると見なされる方法を説明してください。