问题标签 [iso-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 投票
3 回答
1378 浏览

if-statement - Prolog 中带有 If-Else 语句的递归函数

我正在尝试在 prolog 中编写一个递归函数,该函数在R = (2*X + Y)^N不使用指数运算符的情况下进行计算。我用 if-else 语句编写了一个递归函数,但出现错误:) or operator expected. 在我看来,我的语法是正确的,但我一定遗漏了一些东西。代码如下。

0 投票
5 回答
6487 浏览

prolog - 如何使用 prolog 查找字符串长度

我有一个方法 length(list,var),它给了我一个列表的长度,但我想找到一个字符串的长度,有人有解决方案吗?

0 投票
1 回答
458 浏览

prolog - 可在线搜索的 Prolog 语言描述

是否有在线可用的 Prolog 语言(语法和语义)的描述?

有很多实现参考手册。但这些都不是语言描述。例如 SWI Prolog 手册状态

本手册没有描述 Prolog 的完整语法和语义。

一套印在纸上的书籍,出版于十九世纪八十年代。而对于 ISO 标准,这是为了钱和“应该从我国的 ISO 代表处获得”的胡言乱语。

0 投票
3 回答
343 浏览

serialization - 相当于 SWI Prolog 中的 Python 酸洗?

我有一个 Prolog 程序,我在其中对所有字符串进行暴力搜索,直到一定长度。我正在检查哪些字符串与某个模式匹配,不断添加模式,直到希望找到一组涵盖所有字符串的模式。我想将哪些存储到与我的任何模式都不匹配的文件中,这样当我添加新模式时,我只需要检查剩余部分,而不是再次进行整个蛮力搜索。

如果我在 python 中编写它,我只会挑选字符串列表,然后从文件中加载它。有人知道如何在 Prolog 中做类似的事情吗?

我有丰富的 Prolog 编程经验,但很少使用 Prolog IO。我可能会编写一个谓词来读取文件并将其解析为一个术语,但我认为可能有一种方法可以更轻松地做到这一点。

0 投票
2 回答
142 浏览

list - 根据列表中的现有原子生成新原子

我想知道如何根据另一个列表中的现有原子在列表中生成一个新原子。给定列表:

我想生成一个新列表,例如:

换句话说,类似于字符串加法的东西,例如

0 投票
3 回答
527 浏览

prolog - 扩展至 CFG,它是什么?

考虑以下对上下文无关文法的扩展,它允许规则在左侧具有一个(或多个)终结符在非终结符的右侧。也就是说,形式的规则:

右手边可以是任何东西,比如在上下文无关文法中。特别是,不需要右手边的末尾有完全相同的终端符号。在这种情况下,此扩展将是上下文相关的。但终端不仅仅是一个上下文。有时,这个终端被称为“推回”。

显然,这不再是 CFG(类型 2)。它包括类型 1。但它是什么?真的已经是 type-0 了吗?

允许此特定扩展。(为了避免误解,我在这里不考虑 Prolog 的完整扩展。即我假设终端来自有限的字母表而不是任意术语,我也不考虑 DCG 中允许的 Prolog 的附加参数,这些参数也进入类型- 0 已经。)


编辑:这是描述扩展的更简单方法:添加到表单的 CFG 规则

0 投票
4 回答
417 浏览

prolog - Prolog 是否有条件并像 Common Lisp 一样重新启动系统?

Common Lisp 允许通过条件和重新启动来处理异常。粗略地说,当一个函数抛出异常时,“捕捉者”可以决定“抛出者”应该如何/是否应该继续。Prolog 是否提供类似的系统?如果没有,是否可以在现有谓词之上构建一个用于遍历和检查调用堆栈的谓词?

0 投票
2 回答
172 浏览

prolog - (\+)//1 的合法使用

在语法规则()中,有几个预定义的结构:(',')//2含义连接、('|')//2含义交替等。一个由多个但不是所有 Prolog 系统支持的结构是(\+)//1.

就个人而言,我只是为了使用它而使用它。我从未在其他人编写的代码中看到它。

那么,是否有合法用途(\+)//1

编辑:此外,在带有未实例化变量(\+)//1的查询中是否有合法用途。phrase(nt, L)L

0 投票
1 回答
867 浏览

prolog - DCG 扩展:坚定不移被忽视了吗?

假设我有以下 DCG 规则:

通常这将被翻译为:

是否允许 Prolog 系统将其翻译如下,
即将统一合并为头部和目标?

如果 DCG 扩展不坚定,则不允许
将 [41|B] 放在 expr 调用的第三个参数中。

但我想踏实已经到位,所以一切都应该没问题吧?

再见

PS:有关坚定的非正式定义,请参见:
Richard O'Keefe,2009:
“作为 Prolog 编程中“坚定”一词的发明者,
我应该赞成它。坚定基本上
意味着你不能强行降低谓词通过错误地填写输出参数来错误的路径
。”
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

PSS:有关其他 DCG 翻译,请参见最新的
DCG 标准提案。附录包含 DCG 转换器
源代码:
ISO/IEC DTR 13211–3:2006
定句语法规则
Klaus Daessler
2012 年 11 月 20 日
N238 DIN Draft 2012-11-20

0 投票
1 回答
2127 浏览

prolog - prolog 程序检查给定的输入是数字还是大写还是小写

我已经为上述程序使用了以下逻辑,但它给出了错误显示>=/2: Arithmetic: 'a/0' is not a function。我应该怎么做才能更正程序?

谢谢