问题标签 [prolog-directive-dynamic]

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 回答
3910 浏览

prolog - 在 gprolog 中声明谓词动态

我在 Prolog 中有这段代码:

但我仍然收到此错误:

当我执行 goto(foo) 时。

我已经阅读了动态文档,但我不知道如何使用它,至少在 gprolog 中是这样。我错过了什么吗?

0 投票
1 回答
23068 浏览

prolog - 序言中的“动态”谓词

如果我想使规则动态化,以便在加载数据库文件后使用断言,我该怎么做?我现在正在使用 XSB Prolog,文件是这样的:

当我尝试使用 XSB 查阅文件时,出现错误:

有任何想法吗?

0 投票
3 回答
529 浏览

performance - Prolog 中的高效可变图表示?

我想以一种有效的方式在 Prolog 中表示一个可变图。我将在图中搜索子集并用其他子集替换它们。

我已经设法使用数据库作为我的“图形存储”来工作。例如,我有:

retract然后,我对匹配的子集使用一些规则,并使用assert. 我真的很喜欢这种方法……它易于阅读和处理,我让 Prolog 完成了很多繁重的模式匹配工作。

我知道的另一种表示图形的方法是使用节点列表和邻接连接。我见过很多网站都使用这种方法,但我有点犹豫,因为它的开销更大。

执行时间对我来说很重要,对我来说易于开发也很重要。

这两种方法的优缺点是什么?

0 投票
1 回答
950 浏览

prolog - 谓词缓存

是否有缓存谓词的 Prolog 实现或库?

或者你会使用assertz/1和retract/1实现一个FIFO缓存,像这样:

在 ECLiPSe-CLP 中,至少可以使用额外的逻辑变量替换 findall/3 行:

在我的机器上,对此 ccall/1 的 1000 次调用需要 >4.00 cpu sec,而实际目标 cpu 时间可以忽略不计(0.04 cpu sec)。所以我猜想在解释器内部实现的缓存(特别是 LRU 缓存左右)仍然会优于 assertz/1 和retract/1。

我不想为每个谓词都缓存,当然,只缓存极少数谓词。一个场景可能是这样的:p([H|T], E) :- q(H,E) ; p(T,E)没有q/2副作用。p/2需要一个稳定增长的列表,但总是/经常是相同的E

0 投票
1 回答
1332 浏览

prolog - 我可以在 assert/1 中使用变量吗?

我现在检查 X(Y) 在我的小数据库中不是一个公认的事实。由于 X(Y) 返回 false,它将尝试断言它。(我意识到当 X 是规则而不是事实时,这会带来问题)

例如,假设这个事实在数据库中

我问 ifNotAdd(哺乳动物,大象)。

我想让它看到吗?哺乳动物(大象)。为假,然后断言哺乳动物(大象)。

显然是“断言(X(Y))”。线是错误的,但我用什么来代替它?我正在搜索序言文档和论坛来寻找答案,但到目前为止还没有运气。我也在尝试写一些可以自己完成的东西。

编辑 我需要编辑数据库以获得用户可以与之交互的动态数据库。我正在构建一个论证机器,我需要允许用户告诉系统他们“肯定知道事实”,以便系统可以处理其领域之外的知识。

http://en.wikipedia.org/wiki/Reason_maintenance的脉络中

干杯,

0 投票
1 回答
7827 浏览

prolog - 我想在序言中创建动态事实

我写了以下简单的代码,我希望当我写“男性”时,这段代码会问我一次“它是男性吗?” 如果我输入“否”,它会在屏幕上写下“她是女性”。

但此代码有以下错误:

swi-prolog 中的错误是:

0 投票
2 回答
1087 浏览

prolog - 序言中没有头的子句是什么意思?

在 Prolog 程序的开头,我看到:

这似乎是一个没有头的子句。这是什么意思?

0 投票
1 回答
41 浏览

list - 不可预测的动态谓词行为

我有一个问题,需要我将元素添加到分布在各种谓词中的列表中。我选择使用动态列表谓词,而不是通过基于参数的列表。我简单的例子可以在下面看到。当我最初使用它时它工作得很好,但现在如果我使用任何参数作为 X,即使在关闭程序并重新编译之后,它也会继续从列表中检索以前的参数数据。有人知道它有什么问题吗?

0 投票
2 回答
338 浏览

prolog - 我可以使用 Prolog 从另一个文件中检索信息吗?

我正在尝试编写一个简单的翻译脚本,但文件变得相当……冗长且令人困惑,主要是因为我已将所有翻译存储在文件末尾。它们的格式为动词(英语、芬兰语)。

我想知道是否有任何方法可以将它们存储在不同的文件中,所以我不需要处理它们。我已经研究过使用咨询谓词,但我认为这并不完全符合我的需要。有没有办法在 SWI-prolog 中做到这一点?

作为记录,如果我使用咨询谓词,我会收到以下错误消息:

但是,如果我尝试使用咨询谓词,则会收到此错误:

0 投票
1 回答
905 浏览

prolog - Prolog获取动态事实值

在学习 Prolog 时,我正在编写一个基于文本的游戏,这是其中的一部分:

我收到一个关于静态程序的错误,但一个简单的搜索修复了它,在运行游戏时我会很快说dynamic stat/3。然而,在那之后,我在声明 Health 变量的文件中进一步收到错误:

我将问题缩小到这个(序言控制台):

在被声明为动态后,它不再在静态数据库中。但是通过谷歌搜索,找不到与我的问题相同的案例。我只需要查询和撤回/断言一个数据库。