問題タブ [successor-arithmetics]

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

prolog - マトリックス行プロローグのリストとしてのマトリックス

[[a,b],[c,d]]ペアノ記法で数値を表すこのような用語を使用して、行列を行列の行のリストとして表現する必要があります。

行列の行を取得する必要があります

ow(X,N,C): C は行列 X の N 番目の行であり、行列の列

column(X,N,C): C は、行列 X の N 番目の列です。

また、最初の列の行列と残りの行列 (これはまったく同じ行列ですが、最初の列はありません) を分解するものです。

誰か助けてくれませんか?

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

prolog - 後継算術和の最適なグリーン カットは?

Prolog でグリーン カットを理解するために、後継演算の合計の標準定義にそれらを追加しようとしています (このクエリの SLD ツリーとは? のplus述語を参照してください)。考えられるのは、すべての無駄なバックトラックを排除する (つまり、 no ) ことによって出力を可能な限り「クリーンアップ」することですが、引数のインスタンス化のすべての可能な組み合わせ (すべてインスタンス化されたもの、1 つまたは 2 つまたは 3 つが完全にインスタンス化されていないもの、およびすべてのバリエーション) で同一の動作を維持することです。部分的にインスタンス化された引数を含みます。... ; false

これは、この理想にできるだけ近づけようとしているときに私ができたことです(ソースとしてグリーンカットを挿入する方法append/3に対する偽の答えを認めます):

SWI では、 SWI の述語記述の表記法と?- plus(+X, -Y, +Z).同様に、shape を除くすべてのクエリでうまく機能するようです。たとえば、利回り. 私の質問は次のとおりです。?- plus(s(s(0)), Y, s(s(s(0)))).Y = s(0) ; false.

  • 上記のカットがグリーンである (またはそうでない) ことをどのように証明しますか?
  • 他のグリーン カットを追加することで、上記のプログラムよりもうまくやり、最後のバックトラックもなくすことができるでしょうか?
  • はいの場合、どのように?
0 投票する
2 に答える
283 参照

prolog - 可逆的な木の長さの関係

私は「純粋な」プロローグ(いいえis、カット、または同様のもの。はい、それは宿題です)で可逆的な関係を書き込もうとしていますが、方法がわからないことを認めなければなりません。そのようなものを作るプロセスは見当たらない。

「純粋ではない」が可逆的な算術関係(add、mult、equal、less、...)が与えられ、これらの関係を作成するために使用する必要があります。

今、私は二分木の葉のリストであるtree(List,Tree)場合に真である関係を作成することによって可逆関数を作成する方法を理解しようとしています。ListTree

そのようなことを達成するために、私は葉tree_size(Tree,N)があるときに真である関係を作成しようとしています。これが私の素朴で不可逆的な関係です:TreeN

クエリは実行できますtree_len(some tree, N)が、たとえば、は実行できないtree_len(X,3)ため、元に戻すことはできません。これまでにいくつか試してみましたが、どこで何を探すべきかわからないので、がっかりしていることを認めなければなりません。これを行う方法は実際にありますか?

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

prolog - Prolog再帰手続きの説明

可能であれば、誰かにこの手順を説明してもらいたいです (「learn prolog now」という本から)。2 つの数字を取り、それらを加算します。

原則として理解していますが、いくつか問題があります。クエリを発行するとしましょう

結果は次のとおりです。

ステップ 1 はルール 2 との一致です。ここで、X は s(0) になり、Y は s(0) のままです。ただし、Z (本によると) は s(_G648)、またはその中にインスタンス化されていない変数を持つ s() になります。どうしてこれなの?

最後のステップで、最初のルールが一致し、再帰が終了します。ここで、Y の内容は、どういうわけか、Z のインスタンス化されていない部分になってしまいます! 非常に紛らわしいので、わかりやすい英語の説明が必要です。

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

prolog - Prolog-suc表現を10進数に変換する

これは私のコードです:

なぜこれが私にそのような出力を与えるのですか?

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

prolog - 基本的な PROLOG カウント

私はプロローグが初めてで、次をカウントする述語を作成しようとしています: 述語名は、与えられたときに s2int です:

  • s2int(0,Y) Y=0 を「返す」必要があります。
  • s2int(s(0),Y) => Y=1.
  • s2int(s(s(0)),Y) => Y=2.
  • s2int(S(s(s(0))),Y) => Y=3.

などなど..ここに私が書こうとしたものがあります(非常に貧弱です)。最初に私はこのコードを試しました:

しかし、s2intAux(s(0),Y) と入力して実行しようとすると、「エラー: is/2: 引数が十分にインスタンス化されていません」というエラーが表示されます。Y は定義されていないため、エラーが発生します。それから私はこれを試しました:

(値ゼロで Y を開始しようとしましたが、これはまったく機能しませんでした) 数時間立ち往生しているので、皆さんに頼っています。助けてください! ありがとうございました。

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

prolog - プロローグ、項が 2 の累乗かどうかをチェック

私のロジックで動作するはずの次のコードを作成しましたが、動作しません。

与えられた項が 2 のべき乗であるかどうかを確認する必要があります。たとえばs(s(s(nul)))、false を返すs(s(s(s(nul)))必要があり、true を返す必要があります。

私の考えは、与えられたものが2の次数であるかどうか、そうでない場合は2の次数ではないことを確認することでした。

数値では、このように機能するはずです。たとえば、私は8番を与えます。

つまり、id の 2 の 8 乗です。

他の解決策がうまくいくかもしれませんので、助けてくれてありがとう。

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

prolog - Prolog プログラム - Peano 番号のリスト - 複数の回答を返すルール

goodリストの各用語がペアノ数であるリストを取るルールで Prolog プログラムを作成しようとしています。リスト内の各要素が前の要素よりも大きい場合にのみ、ルールは true になります。

たとえば、次の例が当てはまる必要があります。

また、次の例は false である必要があります。

これが私のコードです:

ただし、正のクエリgood([0,s(0),s(s(0))])の場合、 true と false の両方がソリューションです。

エラーは何ですか?

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

prolog - Prolog の後継関数

最近、論理プログラミングの大学レベルの試験で遭遇した質問でodd/1、与えられた値が奇数かどうかを判断する Prolog 述語 をプログラミングするように求められました。

s/1実装は、指定された要素の後続 (つまり X + 1) を評価する、既に指定された predicate を使用することになっていました。odd/1これは述語の実装のために与えられた解決策でした:

  1. !最初の式の は実際に何らかの目的を果たしますか? この後、後戻りを防いでいるのはわかっていますが、次のような表現はありませんか? これは、解決アルゴリズムがこの時点で停止するということですか?
  2. 練習のために後継述語を実装しようとしましたが、実装s/1できませんでした。(どのように) この述語を Prolog で実装できますか?