【发布时间】:2020-08-15 08:34:11
【问题描述】:
我在SWI Prolog Discourse forum 上发布了这个问题,得到了一些有用的 cmets,但也许这里的人也对这个话题有一些想法。
我对如何在我们正在撰写的论文中使用“原子”这个词感到有些困惑。
(1) 在 Prolog 中,原子被称为“文本常量”。用作复合术语的名称,表示常量或文本。”。见here。因此,这些是原子:john、grandparent 等。
(2) 在有关逻辑编程的文本中,例如Riguzzi (2018) 和Baral and Gelfond (1994),“原子”被称为具有p(t1, t2, ..., tn) 形式的术语,其中ts 是术语,p 是谓词符号。这对应于经典一阶逻辑中“原子”的使用。
在谈论 Prolog 时假设 (1) 是“atom”的正确定义,而在谈论逻辑编程时假设 (2) 是“atom”的正确定义,我是否正确?我认为我感到困惑的一个原因是我将 Prolog 视为逻辑编程的一个实例。
干杯/JC
编辑 2020-08-18********************************************** *****
在使用 LP 术语时解释统一有点困难;我试过了。
与典型 Prolog 术语的统一:
- 原子、数字、变量和化合物都是术语
- Atom = 以小写字母开头的字符串
- 数字 = 一个数字
- 变量 = 以大写字母开头的字符串
- Compound = p(t1, t2, ..., tn) 其中 p 是谓词符号,ts 是术语。
统一:
- 如果两个原子相同,则它们会统一
- 如果两个数相同,则统一
- 变量与任何类型的术语相结合
- 如果 (1) 它们具有相同的名称,(2) 相同数量的参数,(3) 它们的所有参数统一,(4) 它们的变量可以一致地实例化,则两个化合物统一
与典型 LP 术语的统一:
- 常量、变量和函数都是术语
- 常量 = 以小写字母或数字开头的字符串
- 变量 = 以大写字母开头的字符串
- Function = f(t1, t3, ..., tn) 其中 f 是函数符号,ts 是项
- 原子公式 = p(t1, t2, ..., tn) 其中 p 是谓词符号,ts 是术语
统一:
- 两个常量如果相同则统一
- 变量与任何类型的术语相结合
- 两个原子公式或两个函数统一如果 (1) 它们具有相同的名称,(2) 相同数量的参数,(3) 它们的所有参数统一,(4) 它们的变量可以一致地实例化
【问题讨论】:
-
我认为你是对的:Prolog 将“原子”用于(某一类)形式逻辑称为“常量”的东西。您引用的文本将其用作“原子公式”的简写。在您的论文中完全避免使用“原子”一词并改用“常数”或“原子公式”可能是有意义的,除非您专门撰写有关 Prolog 的文章。至于 Prolog 是“逻辑编程”的一个实例,这个术语非常模糊,没有是/否的答案。
-
是的,同一个词,但根据上下文的不同含义不同。我很确定Prolog的“原子”来自LISP的“原子”,它类似于“代表自身的短字符串”,类似于其他编程语言的“关键字”,但程序员可以灵活使用(尤其是在enums 等指定地点之外)。
-
Prolog 的“函子”具有相同的歧义,它代表与“谓词”相同的概念:一个符号常数(即一个原子)和一个元数——但“函子”在 @987654326 中使用@ 自 40 年代以来,在那里有非常不同的含义。
标签: prolog