問題タブ [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 - この Prolog+C コードが失敗したのはなぜですか?
基本的に、Prolog からいくつかの C コードを呼び出したいと思います。コードは次のとおりです。
プロローグ:
子:
問題は、このコードを実行した後の出力が次のようになることです。
4 番目の出力が新しいメモリ アドレスである理由がわかりません。私の理解では、それも0xbfae8bccである必要があります。
私が間違っている?誰か助けてくれませんか?
prolog - C 関数から Prolog 呼び出し可能なインターフェイスを自動的に生成できるツールはありますか?
したがって、基本的には Prolog を使用して、GNU-Prolog を使用して多数の C 関数を呼び出しています。
次に例を示します。
この関数を Prolog コードから呼び出したい場合は、次のインターフェイスを作成する必要があります。
Prologコードでは、これを追加する必要があります:
そのため、多数の C 関数を扱っており、これらのインターフェイスを 1 つずつ手動で作成すると、かなり時間がかかります...
もちろん、この作成を行うためのアドホック ツールを作成することはできますが (おそらく CIL を使用して..)、車輪の再発明はしたくありません。
だから私の質問は:
C 関数から Prolog 呼び出し可能なインターフェイスを自動的に生成できるツールはありますか?
c - 「Prolog+C」で 1 つの変数のアドレスを格納できないのはなぜですか?
基本的に、Prolog からいくつかの C コードを呼び出したいと思います。コードは次のとおりです。
プロローグ:
子:
これを使用してバイナリ形式にコンパイルします。
問題は、このコードを実行した後の出力が次のようになることです。
4 番目の出力が新しいメモリ アドレスである理由がわかりません。私の理解では、それも0xbff2160cである必要があります。
私が間違っている?誰か助けてくれませんか?
prolog - これらのメモリ アドレスを gnu prolog で取得することは可能ですか?
基本的に、gnu-prolog を使用して C ポインターの逆参照をシミュレートしようとしています。
コードは次のとおりです。
プロローグ
子:
ptr はスタック上の単なる一時変数であり、そのメモリは fun の呼び出し後に解放されるため、基本的には間違っています。
私の質問は、gnu prolog で変数のメモリ アドレスを取得することは可能ですか (たとえば、この場合、ptr のアドレスではなく、A のアドレスです)。
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 コードなしで文字列を出力するにはどうすればよいですか?
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のマニュアルを読んで、試してみました
しかし、それはうまくいきません....
誰か助けてくれませんか?
prolog - GNU Prologで「long int」を使用するには?
つまり、基本的に、GNU Prolog は私の 32 ビット x86 Linux で 28 ビット整数を使用しているようです。
以下のコードはコンパイルできません。
次に、以下の 2 つの典型的な状況で混乱します。
32bit
GNU Prolog (0xdeadbeef など) で整数を表す方法は? さらに押して、64ビット整数を表す方法は?64 ビット x86 Linux では、「long long
C has 64 bit」と入力します。GNU Prolog を使用して C を呼び出す場合、マニュアルで定義されているインターフェイスには
integer
、およびその他があります..次に、Prolog から C に整数positive
を渡したい場合、どの型を選択すればよいでしょうか..?32bit
アドホックな解決策を見つけて、この質問に書いています。より良い解決策はありますか?
誰か助けてくれませんか?