問題タブ [gnu-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.
prolog - [失敗するまでやり直す]を選択します。なぜですか?
私は次の機能を持っています:
次の方法でトレースをオンにして呼び出します。
上記のトレースでRedoが呼び出された理由がわかりません。select "worked"を使用するべきではないため、次に呼び出される行は
誰かがここでやり直しの外観を説明するのを手伝ってもらえますか?前もって感謝します。
prolog - Java の gnu.prolog で (nb_)setarg/3 を使用する
現在、gnu.prolog ( http://www.gnu.org/software/gnuprologjava/ ) を使用して Java からプロローグを使用しようとしています。
CapelliCの多大な助けのおかげで、私の目的に最適なプロローグ プログラムが完成しました。問題は、gnu.prolog が をサポートしておらず、サポートreverse/2
していないことnb_setarg/3
です。Java はエラーをスローします。
reverse/2
自分で実装するのは大きな問題ではありませんが、置き換える方法がわかりませんnb_setarg/3
(setarg/3
これも機能しません)
ここに私のプロローグコードがあります:
JPL
fromを使用しようとしましSWI Prolog
たが、Eclipse がライブラリを正しく見つけることができなかったという重大な例外が指摘されたため、実行できませんでした。私は常に次の例外のいずれかを取得します。
これとこのガイドに従った後でも、問題を解決できませんでした。Windows (32 ビット) でも Ubuntu (64 ビット) でもありません。
JPL
どうすれば実行できるようになるか、またはどのように使用できるようになるかの解決策はありますnb_setarg/3
か? 今まで、結果が出ずに1日半過ごしました。かなりイライラ...
prolog - プロローグはリスト内の最小値を見つけるエラー
私は自分のコードを機能させようとしていますが、どういうわけか問題に行き詰まりました。プロローグするのは非常に初心者です。これは私のコードです。
しかし、 findMin() を呼び出すと、このエラーが発生します
キャッチされていない例外: error(type_error(evaluable,'.'/2),(<)/2)
私は本当に立ち往生していて、何をすべきかわかりません。どんな助けでも大歓迎です。
アプリケーションの目的は、shortestPath() を呼び出して最短パスを取得することです。パスは距離 (a、b、距離) にあります。
prolog - GNU Prolog のエラー
私はこのコードを持っています:
そして、私はこれらのエラーを受け取ります:
e.pl:1:2: 構文エラー: 。式 e.pl:5:2 の後に or 演算子が必要です: 構文エラー: 。式の後にまたは演算子が必要です
このコードの何が問題なのか教えていただけますか?
prolog - GNU と SWI で動作する Prolog コードの作成
これには制限があることは承知していますが、GNU または SWI のいずれかで合理的に機能するように、Prolog コードに条件付きディレクティブを配置する合理的な方法はありますか? sumlist
少なくとも、 SWI やGNUなどの組み込み述語sum_list
のスペルが一致しない最も単純なケースを考えています。または、SWI にはありますassert
が、GNU にはありません。したがって、次のようなものがあればいいでしょう。
または単に:
または、そうではありません。条件付きディレクティブは両方の言語に存在しますが、この種のことを行うために必要な条件を提供するまでには至らないようです。手動検索では見つからなかったものを見逃している可能性があります。
prolog - gprolog - あるリストが別のリストの順列であるかどうかを判断する簡単な方法
あるリストが別のリストの順列であるかどうかを判断するプロローグ プログラムを作成しようとしています。入力は の形式で、 listが list の順列であるperm(L,M)
場合にのみ true になります。L
M
これは私の AI クラスのためのものなのでpermutation
、gprolog が既に提供している気の利いた小さな述語をそのまま使用することはできません。私たちの教授は、member
述語が役立つかもしれないと指摘しましたが、述語を含む私が持っているアイデアは、非常にトリッキーで、それほど宣言的ではないものを必要とするようです (そして、あまり高度にならずにこれを解決する方法があると思います.クラスはプロローグにとって新しいものです。)
とにかく、確認する方法の 1 つは、L
とM
が同じサイズであること、各L
要素が にM
あり、各M
要素が にあることを確認することですL
(! の使用がありmember
ます)。[2,2,4]
ただし、これはや などの場合には十分ではありません[4,4,2]
。
別の方法としては、各要素の同じカウントが反対側のリストにあることを確認することもできますが、プロローグに関する私の印象では、あらゆる種類の変数「メモリ」はかなり難しいビジネスです (実際、私が見たサンプル プログラムはソートの実行などは、実際にはまったくデータを操作しているわけではありません。それらは単に「仮説的に」物事を再配置し、イエスかノーかを伝えているだけです...?)
精神的には、リストとチェック要素の両方を並べてソートすることもできますが、それは、他の多くの考え方の中で、オブジェクト指向すぎるように思えます...
ヒントはありますか?私の最大の問題は、(前述のように)「操作」を行うことは、それらについて尋ね、目的の場所に到達するのに十分長く物事が真実であり続けることを望んでいるように見えるという事実のようです.
**更新: gprolog はdelete
機能を提供しますが、次のような試みを行うと、予想していた宣言関連の問題が発生します。
perm([LH|LT], R) :- member(LH,R), delete([LH|LT],LH,R), perm(LT,R).
マニュアルでは、delete は次のように定義されています。
実行:
**更新 2: 私はそれを理解したかもしれないと思います! ちょっと冗長ですが、かなりの数のケースでテストしましたが、まだ悪いケースは見つかりませんでした。誰かが大きな問題を見つけたら、指摘してください:
私はカットオペレーターが好きです..
prolog - GNU Prolog: クエリの WAM コードを表示していますか?
GNU Prologを使用してクエリの WAM コードを表示することはできますか?
pl2wam を使用してプログラムの WAM を生成できることはわかっていますが、プログラムで実行するクエリはどうでしょうか。これの WAM コードを表示する方法はありますか?
x64 Windows でバージョン 1.4.4 を使用しています