我希望能听到有实际编程经验的人使用SWI-Prolog语义库的经验。 编辑:我提出这个问题的原因是,在与许多拥有Prolog经验的人交谈中,他们中的大多数似乎在他们的学术项目中将其用于一些人工智能编程。我想知道是否有人在生产环境中广泛使用它。因为实时可维护性和性能不同于完成项目以获得好成绩。 ...
我想将这个简单的东西加载到我的编辑器中:Write:-repeat,write("hi"),nl,fail. 怎样才能使它打印“hi”? 我目前正在尝试进行文件->新建操作 并将文件保存在E:\Program Files\pl\xpce\prolog\lib中命名为Write 执行...
我正在尝试将一个字符串转换为ASCII码列表,如下所示: 7 ?- string_to_list("I'm a big blue banana in space!", C). C = [73, 39, 109, 32, 97, 32, 98, 105, 103|...]. 8 ?- ...
在我看来,使用DCGs处理字节列表中的二进制数据应该是可行的。然而为了使其通用,必须使用位运算符,这意味着需要使用 is/2,这也意味着实例化顺序是一个问题,这可能会使DCGs在解析和生成时变得混乱。这里的想法是序列化/反序列化二进制数据,但我认为这个示例足够简单,可以说明问题。 让我用一些...
我想知道是否有任何方法可以使用Prolog进行流处理,也就是说,一种响应式编程方式,或者至少让查询在不断更新(有效地成为一个流)的知识库上运行,并持续输出推理结果? 是否有任何在流行的“Prologs”(如SWI-Prolog)中实现的方法?
许多Prolog系统都有一个freeze/2谓词,这个谓词可能应该被命名为geler/2,因为它甚至在Prolog-II之前就被发明了。 假设我有一个关于同一变量的条件,但是有两个不同的目标,即: ?- freeze(X, G1), freeze(X, G2), X=1. 什么是首选...
我正在尝试在 SWI-Prolog 实现一个简单的 switch 语句宏。 这是一系列条件语句: (X = a -> Output = case1; X = b -> Output = case2; X = c -> Output = case3)...
我希望在SWI-prolog控制台内使用键盘快捷键或命令(我猜在Prolog中称之为“predicate”)清除屏幕。 这里 是类似的问题,我在其中找到了适合我的谓词: write('\33\[2J'). 有没有更好(更简单)的清屏方式?
我有一个确定列表成员的标准流程: member(X, [X|_]). member(X, [_|T]) :- member(X, T). 我不理解的是,当我提出以下查询时: ?- member(a,[a,b]). 结果是。 True; False. 我本以为当第一个规...