问题标签 [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 - GNU Prolog 断言错误
我是 Prolog 的新手,但我被这个所谓的简单命令所困扰。我已经加载了一个没有错误的知识库,每当我尝试断言(甚至帮助)时,我都会收到以下消息:
我到底错过了什么?赞赏。
c - 为什么这个 Prolog+C 代码失败了?
所以基本上我想从 Prolog 调用一些 C 代码,这里是代码:
序言:
C:
问题是,在我运行这段代码之后,输出是:
我不明白为什么第四个输出是一个新的内存地址,据我了解,它也应该是0xbfae8bcc,
我错了吗?谁能给我一些帮助?
prolog - 是否有任何工具可以从 C 函数自动生成 Prolog 可调用接口?
所以基本上我使用 Prolog 来调用大量使用 GNU-Prolog 的 C 函数。
这是一个例子:
如果我想从 Prolog 代码中调用这个函数,我需要创建这个接口:
在 Prolog 代码中,我需要添加以下内容:
所以我在处理大量的C函数,并且一个一个地手动创建这些接口会非常耗时......
当然,我可以编写一个临时工具来进行此创建(可能使用 CIL ..),但我只是不想重新发明轮子。
所以我的问题是:
是否有任何工具可以从 C 函数自动生成 Prolog 可调用接口?
c - 为什么我不能在“Prolog+C”中存储一个变量的地址?
所以基本上我想从 Prolog 调用一些 C 代码,这里是代码:
序言:
C:
我用它编译成二进制格式:
问题是,在我运行这段代码之后,输出是:
我不明白为什么第四个输出是一个新的内存地址,据我了解,它也应该是0xbff2160c,
我错了吗?谁能给我一些帮助?
prolog - 是否可以在 gnu prolog 中获取这些内存地址?
基本上我正在尝试使用 gnu-prolog 模拟 C 指针取消引用。
这是代码:
序言
C:
所以基本上是错的,因为ptr只是栈上的一个临时变量,调用fun后它的内存会被释放。
所以我的问题是,是否可以在 gnu prolog 中获取变量的内存地址(例如,在这种情况下,它是 A 的地址,而不是 ptr 的地址)?
prolog - findall/3 返回一个空列表而不是解决方案
我使用 GNU Prolog 来解决问题。我定义了以下谓词:
Prolog 说这clue_two(17)
是真的,但是当我尝试时 findall(S, clue_two(S), L)
,GNU Prolog 返回空列表。为什么?
prolog - 用 prolog 查找布尔电路
问题如下:考虑三个输入 A、B、C,找到一个带有 AND、OR 和 NOT 门的布尔电路,使得输出为 not(A)、not(B)、not(C),最多使用 2 个 NOT大门。
我想用序言找到电路。我的想法是计算一个谓词“可访问”,它接受一个函数并说明它是否存在计算 f 的电路。
我有以下谓词:
我想计算 11,12 之间的函数 xor 所以我尝试以下目标:accessible([0,1,1,0,0,1,1,0], X, 4)。
但是 prolog 在得到好的答案之前运行了一段时间。我想知道如何改进程序以使其更快。
PS 如何使用 GNU prolog 打印没有 ASCII 代码的字符串?
c - 使用指针作为 C 调用 Prolog 进程的参数的奇怪情况
所以基本上我的测试是在 32bit 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。
然后在 Prolog 代码中:
这只是对文件中 c 函数的foo_c_instr
调用interface.c
。
奇怪的是:
例如,e
原始ptr.c
文件中指针的值为0xbf9d4e4c,但是在interface.c
文件中,它的值变为了 0xff9d4e4c!!!
这太奇怪了,我已经调试了很长时间,但我只是不知道出了什么问题......
我用来传递指针参数的接口是:
我阅读了gnu-prolog的手册,并尝试了
但它就是行不通....
任何人都可以提供一些帮助吗?
prolog - Workaround ensure_loaded/1 GNU Prolog?
Is there a workaround to make ensure_loaded/1 work in GNU Prolog as it works in many other Prolog systems? The goal is to have a preamble so that the rest of code can use ensure_loaded/1 independent of whether which Prolog system I use.
I tried the following:
But the following query doesn't work:
The path calculation itself is not the issue of the question, but the redefinition of a directive in GNU Prolog. There is another directive that causes problems: meta_predicate/1. The byte code crashes as follows:
Bye
prolog - 如何在 GNU Prolog 中使用“long int”?
所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数。
以下代码无法编译:
然后我对以下两种典型情况感到困惑:
如何
32bit
在 GNU Prolog 中表示一个整数(如 0xdeadbeef)?并进一步推动它,如何表示一个 64 位整数?在 64 位 x86 Linux 上,long long
输入 C 有 64 位。使用 GNU Prolog 调用 C 时,手册中定义的接口有
integer
,positive
和其他的.. 那么如果我想将一个32bit
整数从 Prolog 传递给 C,我应该选择哪种类型..?我找到了一个临时解决方案并将其写在这个问题中,有没有更好的解决方案?
谁能给我一些帮助?