问题标签 [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 回答
2276 浏览

prolog - GNU Prolog 断言错误

我是 Prolog 的新手,但我被这个所谓的简单命令所困扰。我已经加载了一个没有错误的知识库,每当我尝试断言(甚至帮助)时,我都会收到以下消息:

我到底错过了什么?赞赏。

0 投票
1 回答
107 浏览

c - 为什么这个 Prolog+C 代码失败了?

所以基本上我想从 Prolog 调用一些 C 代码,这里是代码:

序言:

C:

问题是,在我运行这段代码之后,输出是:

我不明白为什么第四个输出是一个新的内存地址,据我了解,它也应该是0xbfae8bcc

我错了吗?谁能给我一些帮助?

0 投票
0 回答
143 浏览

prolog - 是否有任何工具可以从 C 函数自动生成 Prolog 可调用接口?

所以基本上我使用 Prolog 来调用大量使用 GNU-Prolog 的 C 函数。

这是一个例子:

如果我想从 Prolog 代码中调用这个函数,我需要创建这个接口:

在 Prolog 代码中,我需要添加以下内容:

所以我在处理大量的C函数,并且一个一个地手动创建这些接口会非常耗时......

当然,我可以编写一个临时工具来进行此创建(可能使用 CIL ..),但我只是不想重新发明轮子。

所以我的问题是:

是否有任何工具可以从 C 函数自动生成 Prolog 可调用接口?

0 投票
2 回答
60 浏览

c - 为什么我不能在“Prolog+C”中存储一个变量的地址?

所以基本上我想从 Prolog 调用一些 C 代码,这里是代码:

序言:

C:

我用它编译成二进制格式:

问题是,在我运行这段代码之后,输出是:

我不明白为什么第四个输出是一个新的内存地址,据我了解,它也应该是0xbff2160c

我错了吗?谁能给我一些帮助?

0 投票
1 回答
281 浏览

prolog - 是否可以在 gnu prolog 中获取这些内存地址?

基本上我正在尝试使用 gnu-prolog 模拟 C 指针取消引用。

这是代码:

序言

C:

所以基本上是错的,因为ptr只是栈上的一个临时变量,调用fun后它的内存会被释放。

所以我的问题是,是否可以在 gnu prolog 中获取变量的内存地址(例如,在这种情况下,它是 A 的地址,而不是 ptr 的地址)?

0 投票
1 回答
409 浏览

prolog - findall/3 返回一个空列表而不是解决方案

我使用 GNU Prolog 来解决问题。我定义了以下谓词:

Prolog 说这clue_two(17)是真的,但是当我尝试时 findall(S, clue_two(S), L),GNU Prolog 返回空列表。为什么?

0 投票
1 回答
233 浏览

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 代码的字符串?

0 投票
1 回答
112 浏览

c - 使用指针作为 C 调用 Prolog 进程的参数的奇怪情况

所以基本上我的测试是在 32bit x86 Linux 上,我使用GNU Prolog 1.4.4

就是这样,我有函数ptr.c++pro.plinterface.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的手册,并尝试了

但它就是行不通....

任何人都可以提供一些帮助吗?

0 投票
2 回答
143 浏览

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:

GNU Fatal

Bye

0 投票
1 回答
238 浏览

prolog - 如何在 GNU Prolog 中使用“long int”?

所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数。

以下代码无法编译:

然后我对以下两种典型情况感到困惑:

  1. 如何32bit在 GNU Prolog 中表示一个整数(如 0xdeadbeef)?并进一步推动它,如何表示一个 64 位整数?在 64 位 x86 Linux 上,long long输入 C 有 64 位。

  2. 使用 GNU Prolog 调用 C 时,手册中定义的接口有integer,positive和其他的.. 那么如果我想将一个32bit整数从 Prolog 传递给 C,我应该选择哪种类型..?我找到了一个临时解决方案并将其写在这个问题中,有没有更好的解决方案?

谁能给我一些帮助?