问题标签 [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 - 如何将此规则的所有结果作为事实输入程序中,或者我如何将这些结果作为事实处理?
我想过使用 Assert 但我是新来的 prolog 不确定它是如何工作的想法是最终我想根据某些规则为所有组创建一个时间表例如每个组应该休息一天并且讲座应该先于教程.. .
prolog - SWI-Prolog - 无法断言
我定义一个运算符如下:
当我尝试类似的事情时:
Prolog 引发错误,提示“无权修改 static_procedure (=>)/2”。
有什么解决办法吗?
prolog - Prolog - 断言到新数据库
可能不需要代码片段来回答我的问题。
每次我调用我的规则时,我都想断言一个空白的“问题列表”。仅当我关闭 prolog 窗口并重新启动它时,才会发生这种情况。
有什么建议么?
list - 用 prolog 为用户猜出正确的游戏
我正在尝试制作一个程序,让用户回答问题以找到游戏,但我不明白如何使用列表和断言。我用过程点系统尝试了另一种方法。程序是这样的:
当我运行程序时,结果是:?-是的。请回答问题以找到适合您的游戏!我猜这个游戏是:undefined true。
我不明白为什么这种方式是错误的。我怎样才能用 assert 或 list 做到这一点,这样我才能找到得分最高的游戏并打印出来?
prolog - 如何在不使用 Prolog 中的 findall 或 assert/retract 的情况下将元素添加到列表或从知识库中计算它们?
我有一个知识库,由文件'students.pl'中的学生数据库组成,如下所示:
我想从知识库中访问每个学生谓词并计算每个科目的平均分数或平均百分比,而不使用“findall”或断言/撤回。我可能想像这样使用回溯:
使用这种方法,我可以访问每个元素并编写它,但是如果我想将每个“百分比”值作为一个元素添加到列表中,或者只是使用像“百分比 1 是总计 + 百分比”这样的谓词来合计百分比值,然后找到它的平均值,我该怎么做?请注意,我不想使用 findall 或retract/assert 并且最好在一次通过知识库中找到平均值,因为知识库非常大。
任何帮助表示赞赏。
dynamic - Prolog 根据输入决定选择某个规则
我有这个序言问题,我无法解决。我想要实现的是断言 FACT A,当我有输入时收回 Fact B:接受并断言 Fact B 并在我输入输入时收回 Fact A。
IE:
我无法让它工作:任何帮助将不胜感激。
编辑:发布的所有代码
prolog - 在 Prolog 中保存断言的事实
在序言中,如果我断言一些事实,例如:
我怎样才能将这个事实保存在文件中?
list - 不可预测的动态谓词行为
我有一个问题,需要我将元素添加到分布在各种谓词中的列表中。我选择使用动态列表谓词,而不是通过基于参数的列表。我简单的例子可以在下面看到。当我最初使用它时它工作得很好,但现在如果我使用任何参数作为 X,即使在关闭程序并重新编译之后,它也会继续从列表中检索以前的参数数据。有人知道它有什么问题吗?
prolog - 如何避免在Prolog中使用assert和retractall来实现全局(或状态)变量
我经常在 Prolog 中编写代码,其中涉及一些算术计算(或在整个程序中很重要的状态信息),首先获取存储在谓词中的值,然后重新计算值,最后使用存储值retractall
,assert
因为在 Prolog 中,我们不能使用两次为变量赋值is
(因此几乎每个需要修改的变量都是全局的)。我开始知道这在 Prolog 中不是一个好习惯。对此我想问:
为什么在 Prolog 中这是一种不好的做法(尽管我自己不喜欢通过上述步骤只是为了拥有一种灵活的(可修改的)变量)?
有哪些一般方法可以避免这种做法?小例子将不胜感激。
PS我刚开始学习Prolog。我确实有 C 等语言的编程经验。
为进一步澄清而编辑
下面给出了我想说的一个不好的例子(在 win-prolog 中):
然后我们可以像这样查询:
在这里,这是非常琐碎的,但在实际程序和应用中,上述全局变量的方法变得不可避免。有时,上面给出的列表如assert(value(0))
... 会变得很长,其中包含更多用于定义更多变量的断言谓词。这样做是为了使不同函数之间的值通信成为可能,并在程序运行期间存储变量的状态。
最后,我还想知道一件事:尽管您提出了各种避免方法,但上述做法何时变得不可避免?
prolog - 如何生成强制错误的断言?
首先感谢您的帮助。
关于我的问题:假设我有:
我想在它上面声明一个规则,如下所示:
这是因为我想在some_fact:- true.
不删除规则的情况下将“”转换为强制为假(我不想使用abolish(some_fact,0).
)
问题是我找不到这样做的方法,因为我无法将逗号放在 asserta/1 上。我的意思是当我把:
之间的逗号强制调用 asserta/2 而不是 asserta/1 整个规则,我不能阻止使用引号,因为它断言一个字符串。
当然我不能简单地说asserta(some_fact:- fail).
,因为 prolog 会搜索下一个返回 true 的 some_fact。
有任何想法吗?再次感谢!