問題タブ [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.

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

c - この Prolog+C コードが失敗したのはなぜですか?

基本的に、Prolog からいくつかの C コードを呼び出したいと思います。コードは次のとおりです。

プロローグ:

子:

問題は、このコードを実行した後の出力が次のようになることです。

4 番目の出力が新しいメモリ アドレスである理由がわかりません。私の理解では、それも0xbfae8bccである必要があります。

私が間違っている?誰か助けてくれませんか?

0 投票する
0 に答える
143 参照

prolog - C 関数から Prolog 呼び出し可能なインターフェイスを自動的に生成できるツールはありますか?

したがって、基本的には Prolog を使用して、GNU-Prolog を使用して多数の C 関数を呼び出しています。

次に例を示します。

この関数を Prolog コードから呼び出したい場合は、次のインターフェイスを作成する必要があります。

Prologコードでは、これを追加する必要があります:

そのため、多数の C 関数を扱っており、これらのインターフェイスを 1 つずつ手動で作成すると、かなり時間がかかります...

もちろん、この作成を行うためのアドホック ツールを作成することはできますが (おそらく CIL を使用して..)、車輪の再発明はしたくありません。

だから私の質問は:

C 関数から Prolog 呼び出し可能なインターフェイスを自動的に生成できるツールはありますか?

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

c - 「Prolog+C」で 1 つの変数のアドレスを格納できないのはなぜですか?

基本的に、Prolog からいくつかの C コードを呼び出したいと思います。コードは次のとおりです。

プロローグ:

子:

これを使用してバイナリ形式にコンパイルします。

問題は、このコードを実行した後の出力が次のようになることです。

4 番目の出力が新しいメモリ アドレスである理由がわかりません。私の理解では、それも0xbff2160cである必要があります。

私が間違っている?誰か助けてくれませんか?

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

prolog - これらのメモリ アドレスを gnu prolog で取得することは可能ですか?

基本的に、gnu-prolog を使用して C ポインターの逆参照をシミュレートしようとしています。

コードは次のとおりです。

プロローグ

子:

ptr はスタック上の単なる一時変数であり、そのメモリは fun の呼び出し後に解放されるため、基本的には間違っています。

私の質問は、gnu prolog で変数のメモリ アドレスを取得することは可能ですか (たとえば、この場合、ptr のアドレスではなく、A のアドレスです)。

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

prolog - プロローグでブール回路を見つける

問題は次のとおりです。3つの入力A、B、Cを考慮して、出力が最大2つのNOTを使用してnot(A)、not(B)、not(C)になるようなAND、OR、およびNOTゲートを備えたブール回路を見つけますゲート。

プロローグで回路を探したいと思います。私の考えは、関数を取り、f を計算する回路が存在するかどうかを示す述語 "accessible" を計算することです。

次の述語があります。

関数 xor を 11,12 の間で計算したいので、accessible([0,1,1,0,0,1,1,0], X, 4) という目標を試します。

しかし、プロローグは、適切な答えを得るまでにしばらく実行されます。プログラムを高速化するために、プログラムを改善する方法を知りたいです。

PS GNU prolog を使用して ASCII コードなしで文字列を出力するにはどうすればよいですか?

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

c - C 呼び出しの引数としてポインターを使用する際の奇妙な状況 Prolog Process

したがって、基本的に私のテストは 32 ビット x86 Linux で行われます。GNU Prolog 1.4.4

これがケースです、私は関数を持っていますptr.c+ pro.pl+interface.c

ではptr.c、ラッパーを使用して 内のProlog関数を呼び出しますpro.pl。次に、 ではpro.pl、prolog c インターフェイスを使用して 内の C 関数を呼び出します。interface.c引数はC ポインタです。

ファイルごとにいくつかのコードをここに配置します。

ptr.c :

ほら、ポインタeを引数としてPrologに入れました。

次に、プロローグ コードで:

foo_c_instrこれは、interface.cファイル内の c 関数への単なる呼び出しです。

奇妙なことは次のとおりです。

たとえば、e元のptr.cファイルのポインターの値は0xbf9d4e4cですが、interface.cファイルでは、その値は0xff9d4e4cになります!!!

これはとても奇妙で、かなり長い間デバッグしてきましたが、何が悪いのかわかりません...

ポインター引数を渡すために使用するインターフェイスは次のとおりです。

gnu-prologのマニュアルを読んで、試してみました

しかし、それはうまくいきません....

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

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

prolog - GNU Prologで「long int」を使用するには?

つまり、基本的に、GNU Prolog は私の 32 ビット x86 Linux で 28 ビット整数を使用しているようです。

以下のコードはコンパイルできません。

次に、以下の 2 つの典型的な状況で混乱します。

  1. 32bitGNU Prolog (0xdeadbeef など) で整数を表す方法は? さらに押して、64ビット整数を表す方法は?64 ビット x86 Linux では、「long longC has 64 bit」と入力します。

  2. GNU Prolog を使用して C を呼び出す場合、マニュアルで定義されているインターフェイスにはinteger、およびその他があります..次に、Prolog から C に整数positiveを渡したい場合、どの型を選択すればよいでしょうか..? 32bitアドホックな解決策を見つけて、この質問に書いています。より良い解決策はありますか?

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