問題タブ [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.
c - スタンドアロンとして C から (GNU) Prolog を呼び出す例
Prolog 述語が使用されている C ファイルに基づいて実行可能ファイルをビルドしたいと考えています。GNU Prolog を使いたい。
(gnu プロローグ チュートリアルに基づいて) 成功し、examp_c.c、examp.pl をビルドしました。
を使用してコンパイル
実行可能な例を呼び出すと、Prolog インタープリターが開始/エミュレートされます。
しかし、私が望むのは、Prolog インタープリターを介してユーザーと通信することなく、Prolog を内部的に呼び出す C プログラムを持つことです。Prolog 述語は、C プログラムの引数として、または C プログラム内で送信するか、内部的に生成する必要があります。
これの例を知っていますか?それとも何かを誤解していましたか、それは不可能ですか?
ほら、私は初心者として始めたばかりです...助けていただければ幸いです:-) よろしくお願いします。
c - C インターフェイスで Prolog からリスト要素を取得する
GNU Prolog に基づく Prolog スクリプトを使用して C インターフェイスを実装しようとしています。私の問題は、ネストされた Prolog リストの単一の要素を取得することです。
実際、私のCコードは次のようになります
arg[2] に返される Prolog リストは次のようになります。
文字列への変換の出力は次のとおりです。
したがって、私は「ほぼそこにいる」と思いますが、Cの知識を再度有効にする必要があるため、リストの次のレベルに入力して最終的に各要素を文字列として取得する方法がわかりません(「Spezial Bolognese」、次のステップ: "2"、"Zwiebeln" など)。
C で Prolog リストをステップ実行するにはどうすればよいですか?
私はすべてのヒントをとても嬉しく思います。ありがとうございました!
java - GNU Prolog Java が成功しない
GNU インタープリターで Java 経由で Prolog を使用しようとしていますが、大きな問題が 1 つあります。
変数に対してクエリを実行すると、常に変数の名前が返されます。
だからここにいくつかのコードがあります:
このコードは、GNU Prolog コンソールと SWIPL では問題なく動作しますが、Java では
長さの結果は「長さ」です。したがって、メモリに保存された実際の結果はないと思います。次のようなことを試しif (rc == PrologCode.SUCCESS || rc == PrologCode.SUCCESS_LAST)
て NoAnswerException をキャッチすると、例外がスローされます。私に何ができる?私は何時間も前からその問題を解決しようとしています。助けてください:)
debugging - gprolog: 例外後のスタックトレースの取得
gprologを使用しているときに、次のような行番号やコンテキストのない例外がよくあります。
いかなる文脈もなしに。できることはわかっていますが、エラーが発生した場所に到達する前に多くのことを実行する必要があるため、trace
デバッグに非常に時間がかかります。trace
このスタックトレースを取得する方法について何か考えはありますか? または動的trace
/ notrace
?
trace
編集:または、出力全体の印刷を自動化するだけです。
linux - GNU-Prolog では、Linux シグナルを「キャッチ」できますか?
GNU Prolog 内でオペレーティング システムのシグナルを「トラップ」(たとえば「キャッチ」) する方法はありますか? (Ubuntu/Linux、最新の gprolog を使用しています)。
GNU Prolog に変形する前に、私はずっと前に WAMCC でこのアプローチを使用したと思います。
しかし、たとえば、(repeat,fail) 無限ループを使用してこれをテストすると、
インタプリタで Ctrl-C を押すと、まだトレース/デバッガに移動し、コンパイルされたプログラムは などで中断すると終了しkill -1
ますkill -2
。
--no-top-level
デフォルトのトップレベルが何らかの形で信号をキャプチャする場合に備えて、プログラムをコンパイルしようとしましたが、違いはありませんでした。
SWI-Prolog にon_signal
は目的を果たす適切な組み込みの述語があるようですが、可能であれば gprolog を使用した解決策を探しています。
prolog - GNU Prolog でダミー/プレースホルダー述語を定義する方法
次の構造の Prolog ファイルがあります。
ファイルのユーザー データは、ユーザーが拡張できるように意図されていますが、デフォルトでは何も含まれていません。ただし、とが定義されていないため、これによりクエリfoo(X).
が失敗します。bar/1
baz/1
それらをプレースホルダー値 (つまりbar(none).
) で定義しようとしましたが、ユーザー データがファイルの末尾に追加されると、GNU Prolog は不連続な述語について文句を言います。
bar/1
andのダミー/プレースホルダー バージョンを定義して失敗せず、 and を含む他の行をファイルの末尾に追加できるようにする別の方法はbaz/1
ありfoo(X).
ますbar
かbaz
?
reflection - 特定のアトムを持つすべての述語を一覧表示する方法は?
質問をする別の方法は次のとおりです。
原子のすべてのプロパティを一覧表示するにはどうすればよいですか?
例えば:
agora
そのため、引数の述語をすべて受け取りたいと思います。この場合movie
、director
、duration
、 、その他のパラメータ('Alejandro Amenabar', '2h')
.
私は見つけました: this、およびthis question ですが、よく理解できませんでした。
PersonInvited
映画について何か気に入らない場合は、「変数回答」に false の値を設定したいと思います。
私のクエリは次のようになります。
答え:この監督は好きじゃない
たとえば、ジャンルなどのプロパティでも同じことが起こります。
答え: このジャンルは好きじゃない
したがって、すべてのオブジェクトのすべての機能を繰り返し記述するのではなく、この状況を一般化したいと思います。
c - GPLC で GTK をコンパイルする
GPLC を使用して C GTK gui + Prolog ファイルをコンパイルしようとしています。を使用して、GPLC から gcc コンパイラに複数のフラグを渡すことができることを読みました。-C 'gcc flags here'
わかりましたので、GUIを単独でコンパイルできます
ただし、これは GPLC では機能しません。
pkg-config
これは、「文字列」内にあるため、求めているとおりに応答が得られないことを意味します。どうすれば修正できますか?
最後に、次のような醜いことをすると:
GTK 関数へのすべての参照が未定義であるため、リンク中にコンパイル エラーが発生します。なぜ?
prolog - 数独のサイズを変更するにはどうすればよいですか
サイズ= 9 * 9の数独を解くスクリプトがあります。81個の変数があり、それらのルールを定義しています。
このコードを変更して、任意のサイズの数独を解くにはどうすればよいですか? たとえば、数独 16*16 の場合、ルールはサブスクエア 4*4 になります。
go(L) :-
L=[A1,A2,A3,A4,A5,A6,A7,A8,A9,
B1,B2,B3,B4,B5,B6,B7,B8,B9,
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9,
E1,E2,E3,E4,E5,E6,E7,E8,E9,
F1,F2,F3,F4,F5,F6,F7,F8,F9,
G1,G2,G3,G4,G5,G6,G7,G8,G9,
H1,H2,H3,H4,H5,H6,H7,H8,H9,
I1,I2,I3,I4,I5,I6,I7,I8,I9],
fd_domain(L,1,9),
別のスクリプトを作成する必要がありますか?それとも、このスクリプトを変更できますか? ありがとう、
macos - macOS Sierra で gprolog を実行する方法
を使用して gnu-prolog をインストールしbrew install gnu-prolog
ました。gprolog
ターミナルで実行しようとすると、 gprolog: command not found
. ElCapitan を実行している他のマシンでも同じことを試してみましたが、すべて完全に機能しました。
gprolog
macOS Sierra で仕事をする方法はありますか?