問題タブ [non-termination]

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 に答える
133 参照

parsing - プロローグの解析でスタックが不足しています

私はこのコードを持っています

私が何かをキャストしnp(X). vp(X).たりpp(X)、可能な解析を1つ取得したりして、スタックエラーが発生した場合。私がキャストするとき、私s(X).は解析さえしません。無限ループが実行されているためだとはわかっていますが、どの時点でループされるかはわかりません。すべての変数に同じ名前を使用しているために発生する可能性があると考えましたが、それらを個別の名前に変更しても何も変わりませんでした。

誰でもヒントを得ましたか?

前もって感謝します!

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

prolog - プロンプトが戻ってこない

私はいくつかの演習を試みます - 「s 表現」で数値を表すために、「0」はゼロ、s(0) は 1、s(s(0)) は 2 などです。"s number" を追加するための述語を作成しようとしました: 述語 s2int は "s number" を int に変換します。

クエリを追加すると、正しい回答が書き込まれますが、プロンプトが返されません。どうしたの?

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

infinite-loop - Coq の負の帰納型で False を証明する

CPDT の第 3 章では、Coq で負の帰納型が禁止されている理由について簡単に説明しています。もし私たちが持っていたら

次に、関数を簡単に定義できます

そのため、用語uhoh (Abs uhoh)は非終了になり、「すべての定理を証明できる」ようになります。

非終了の部分は理解できますが、それで何かを証明する方法がわかりません。上記で定義したFalse使用法をどのように証明しますか?term

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

prolog - プロローグ: 障害スライスの冗長なプログラム ポイント?

の概念に基づいて、純粋で単調な Prolog プログラムにおける予期しない普遍的な非終了を説明するための診断ツールを実装しています。

論文「障害スライスを使用した非終了ロジック プログラムの理由のローカライズと説明false/0」で紹介されているように、説明候補のプログラム フラグメント サイズを縮小するために (非終了を維持しながら)、いくつかのプログラム ポイントに目標が追加されます。

これまでのところ、とても良いです...だからここに私の質問があります1

N 個の目標を持つ条項に N+1 個のプログラム ポイントがあるのはなぜですか?

または、より正確には:

なぜ N ポイントでは足りないのでしょうか? (N+1) 番目のプログラム ポイントが必要になることはありますか?

false代わりに、懸念の述語の各使用にそれを移すことはできませんか?

また、プログラムフラグメントは次のようなクエリにのみ使用されることがわかっています?- G, false.

脚注 1:foo(bar,baz).各事実は規則とみなされると仮定します。foo(bar,baz) :- true.

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

prolog - Prolog - いくつかの基本的な算術演算の実装

私は Prolog を初めて使用し、組み込みの述語を使用せずに、自然数に対していくつかの基本的な算術演算を実装する必要があります。

I は単項表記で自然数 Term を表します。つまり、I は定数 0 と、再帰的な後継ファンクターs [つまり、4 = s(s(s(s(0))))] を持ちます。上記の表記に関して、算術演算を実装します。

一連のルールは次のとおりです。

今、クエリすると:

私はすべてOKです:

RES = s(s(s(s(s(s(0))))))。

クエリを実行すると: (6/3=? と尋ねたい)

無限ループに陥って SO になる

mult 述語で再帰呼び出しの順序を変更しても、役に立ちません。

Linux マシンで swi-prolog を実行しています。

アドバイスをいただければ幸いです。

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

prolog - グラフ内のノード間のパスとその長さを見つける

私はこの問題を解決しようとしており、すでにこの回答を読んでいますが、私の問題は、訪問したノードリストを使用した場合でも無限ループにあります。

私の2つの試みを見てみましょう:

同様の答えが得られます。つまり、

そして、Swi-Prolog IDE がフリーズします。

  • 基本ケースとして何を定義すればよいですか?
  • 訪問したノードリストと dif() を使用して統合を確実に回避したとしても、2番目の実装がループするのはなぜですか? 関数名を間違えました。

length/2 の使用をなくしたいと思います。ありがとう。

編集:

したがって、最短経路の問題ソルバーで変換しやすい2番目の実装に似たものが必要な場合でも、これがよりクリーンな方法であることがわかりました。 path3/4 の最初の呼び出しから。


そして、これは 2 番目の実装パス 2 の修正版です。

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

prolog - Prolog 句は個別に終了しますが、一緒には終了しません

そう

動作し、終了し、

も動作し、終了します。でもなんとなく

終了しません。考えられる理由は何ですか?