问题标签 [prolog-assert]
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 - Prolog - 断言和撤回
我想知道,我知道您可以使用assert
添加事实或规则或任何东西,如果您已将谓词声明为-:dynamic
,但这仅允许所做的更改仅保留在该会话中,例如,如果您关闭 Prolog 窗口然后数据库更改将丢失。
所以我想知道,有没有办法让assert
andretract
谓词可以对 Prolog .pl 文件进行永久更改?
谢谢
dynamic - 将事实附加到现有的 prolog 文件中
我无法将事实插入现有的 Prolog 文件,而不会覆盖原始内容。
假设我有一个文件 test.pl:
如果我在序言中加载它,并且我断言更多事实:
我知道我可以通过以下方式保存它:
哪个有效,但 test.pl 现在只包含事实,而不是“:-动态出生/2”:
这是有问题的,因为如果我重新加载此文件,我将无法再将事实插入 test.pl,因为“:-动态出生/2”。不存在了。
我在某处读到,我可以这样做:
这应该只是附加到文件的末尾,但是,我收到以下错误:
顺便说一句,我正在使用 Sicstus prolog。这有什么不同吗?
谢谢!
prolog - 断言和撤回以模拟全局变量
我这样做是为了模拟全局变量:
还有其他方法吗?(除了将变量作为参数传递之外)。不一定更有效率,我只是好奇。
prolog - 在 Prolog 为什么这个查询返回这个特定的结果
这个查询的效果是什么,为什么它会返回这个特定的结果?
prolog - 在 SICStus Prolog / SWI-Prolog REPL 中定义谓词
我正在阅读http://cs.union.edu/~striegnk/learn-prolog-now/html/node3.html#subsec.l1.kb1,但在运行以下谓词时遇到问题:
另一方面,如果我将它写入文件并运行查询文件,它似乎工作正常......
我是否只允许在稍后查阅它们的文件中定义谓词?我不能只在编辑器中做吗?
input - 如何从用户输入断言新规则(PROLOG)
我想接受用户的输入,即[garfield, hates, blacky]
.
hates/2
目前不存在。
在我的数据库中,
但这不起作用。是否可以使用变量作为谓词和事实?或者有没有其他方法可以实现这一目标?
prolog - 在 prolog 中从数据库中调用事实
如果语法类似于
这个语法被插入到数据库中。我必须编写一个 dcg 来为数据库中的 cfg 生成句子。例如,如果我以这种方式定义 dcg myDcg('S',str),则'S'(非终端)应该被调用或替换为aSb或c|d左右。
问题是每次遇到非终端('S')以生成句子时,我如何用数据库中的事实调用/替换'S' 。
希望您理解我的问题,如果没有,我将尝试编辑问题。
下面(示例代码)是我想要做的这不是 dcg。
每当遇到终端时,它应该被打印出来,当遇到非终端时,它将回溯。
memory - Prolog - 如何清除内存并从头开始?
我正在.pl 文件中开发一种算法,并在命令窗口中使用查询对其进行检查。我使用动态变量和撤回/断言谓词。当我修改 pl 文件并单击“重新加载修改的文件”时,我有额外的事实,我不想要。
例如,一开始我有计数器(0)。
我做了一些事情,收回并断言这个计数器,它变成了 counter(7)。然后,当我重新加载修改后的 pl 文件时,我有两个 counter(0)。和计数器(7)。
我怎样才能防止这种情况并且只有计数器(0)。在一开始的时候?
提前致谢。
prolog - 我可以在 assert/1 中使用变量吗?
我现在检查 X(Y) 在我的小数据库中不是一个公认的事实。由于 X(Y) 返回 false,它将尝试断言它。(我意识到当 X 是规则而不是事实时,这会带来问题)
例如,假设这个事实在数据库中
我问 ifNotAdd(哺乳动物,大象)。
我想让它看到吗?哺乳动物(大象)。为假,然后断言哺乳动物(大象)。
显然是“断言(X(Y))”。线是错误的,但我用什么来代替它?我正在搜索序言文档和论坛来寻找答案,但到目前为止还没有运气。我也在尝试写一些可以自己完成的东西。
编辑 我需要编辑数据库以获得用户可以与之交互的动态数据库。我正在构建一个论证机器,我需要允许用户告诉系统他们“肯定知道事实”,以便系统可以处理其领域之外的知识。
在http://en.wikipedia.org/wiki/Reason_maintenance的脉络中
干杯,
prolog - 我想在序言中创建动态事实
我写了以下简单的代码,我希望当我写“男性”时,这段代码会问我一次“它是男性吗?” 如果我输入“否”,它会在屏幕上写下“她是女性”。
但此代码有以下错误:
swi-prolog 中的错误是: