获得正确的术语是传达概念成功的一部分,当在这里使用错误的术语时,使用Prolog标签,受访者很好地指出了错误。
阅读"条款和效果 - 工作程序员的Prolog编程"作者:William F. Clocksin在1997年(WorldCat)是段落
Prolog 计划由程序的集合组成。每 过程定义特定的谓词,是一种特定的关系 在参数之间。一个过程包含一个或多个断言, 或条款。想到两种从句很方便:事实 和规则。
虽然我理解所有的单词,但每个粗体字都是当前正确的术语,用于沟通Prolog时使用吗?
特别是规则的使用似乎不受欢迎。
答案 0 :(得分:4)
来自
ISO/IEC 13211-1 First edition 1995-06-01
信息技术 - 编程语言 - Prolog -
第1部分:
一般核心
程序 - 未定义
3.7 参数:与a关联的术语 预测或复合词。
3.9 arity :复合词的参数个数。语法上,与仿函数或谓词相关联的非负整数。
3.10 断言,to:断言一个子句就是将它添加到 用户定义的过程在数据库中定义 该条款的谓词。
3.19 body :一个目标,以其背景为特色 规则(见3.154)。
3.21 内置谓词:执行的程序 由处理器实现(见8)。
3.32 条款:事实或规则。它有两个部分:头部, 和一个身体。
3.37 复合词:arity N,N positive的编码器,以及N个参数的序列。
3.45 控制构造:一个定义的过程 是Prolog处理器的一部分(见7.8)。
3.59 动态(程序):动态程序 是一个可以在其中检查或改变其条款的人 执行,例如通过声明或撤消*子句 (见7.5.2)。
3.72 事实:一个以正文为目标的条款
注 - 事实可以通过术语在Prolog文本中表示
其主要函子既不是(:-)/1
也不是(:-)/2
。
3.77 仿函数:标识符和arity。
3.81 目标:要执行的预测(参见 正文,查询和7.7.3)。
3.84 头(规则):预测,以其背景来区分。
3.88 标识符:用于表示原子,仿函数名称或谓词名称的基本非结构化对象。
3.129 谓词:标识符和arity。
3.133 预测:具有ar和N的谓词 N个参数的序列。
3.136 程序:控件构造,内置谓词, 或用户定义的程序。程序也是 静态或动态。程序是私人或公共程序 (见7.5)。
3.143 查询:作为交互式输入的目标 顶级。
3.154 规则:主体不是目标的子句。
在执行期间,如果某些替换正文是正确的,
那个替代也是正确的。一条规则
在Prolog文本中以其主体的术语表示
functor是(:-)/2
,其中第一个参数被转换
到头部,第二个参数转换为
体。
3.164 static (过程):静态过程就是一个 其条款不能改变(见7.5.2)。
3.195 用户定义的程序:一个程序 由一系列条款定义,每个条款的头部 子句具有相同的谓词指示符和每个子句 由Prolog文本表达或已在声明期间声明 执行(见8.9)。
编辑: Anton Danilov
我将尝试改进上面的一些定义......
谓词:谓词指标,例如member/2
内置谓词:一个谓词,它是Prolog语言的一部分。它可以实现为库谓词或外语。与常规库谓词不同,可以选择声明内置谓词。
预测:我之前从未听过这个词。可能它只是谓词 或谓词化合物(与功能化合物相反 )。
规则:在我的拙见中,术语"规则"通常用于Prolog和其他基于逻辑的语言(生产系统)
的上下文中编辑 Anton Danilov:
更多信息:
程序用于与规则
类似的上下文中数据库一个(部分)prolog程序经常被调用,因为它主要包含扁平事实(args是原子的)。
关系很少用作谓词(或谓词指标)的同义词。
答案 1 :(得分:1)
关于术语规则的使用的附录:
ISO Prolog Standard在第8页上定义了规则:
3.154规则:其 body 不是 goal
true
的子句。在执行过程中,如果 body 对于某些 substitution 为true,则 head 为 对于替代也是如此。规则以序言文本表示 由一个主要函子为(:-)/2
的术语组成,其中第一个自变量 被转换为 head ,第二个 argument 被转换为 body 。
所以“规则”很酷。
的确,“规则”主要调用了一条称为生产规则的声明性知识,该知识用于CLIPS,{ {3}}或Jess,在那里他们可以拥有一个
...可能带有“搜索”。还有“ Drools”,它们是非常多的前向链接规则,可以编译到Prolog程序中并与Prolog顺利集成。
PS
为求权威,以下是罗伯特·科瓦尔斯基(Robert Kowalski)在RuleML.org于2014年撰写的博客文章中的引用:
他似乎使用:
关于逻辑,规则和逻辑之间关系的困惑 编程在计算机世界中很流行。
...
我对有关两者之间区别的主张特别敏感 演绎和搜索,因为我最早的两篇论文(1、2) 研究了演绎和搜索之间的关系。在我的2011年 在本书(3)中,我讨论了Thagard(4)关于逻辑和 规则,我认为生产有三种 规则:
- 类似于的规则,如果您通过了四十门艺术课程,然后又获得了文学学士学位。这些是逻辑编程子句,用于转发理由 从条件到结论。
- 像这样的规则,如果您想在周末回家,并且拥有公交车票价,那么您就可以上车。这些是“向前链接” 规则,用于通过逻辑编程模拟向后推理 条款,例如,如果有公交车,您周末回家 票价,然后您就坐公共汽车。
- 如果您饿了,就像然后吃点东西。这些是反应性规则,用于在规则的条件为真时使规则的结论为真。
在书中,我认为反应式规则具有更通用的语法 比逻辑编程子句更重要。
- Kowalski,R.(1970),“的搜索策略 定理证明” The Sad State Concerning the Relationships between Logic, Rules and Logic Programming。
- Kowalski,R.(1972年),“ And-or Graphs,定理证明图和 双向搜索” PDF。
- Kowalski,R.(2011)计算逻辑与人类思维:如何 人工智能,剑桥大学出版社。 PDF。 PDF of draft。
- Thagard,P。 (2005)Worldcat。麻省理工学院出版社。
答案 2 :(得分:0)
ISO词汇表有点微妙。它还有一个条目:
3.133谓词:谓词为N且有N个参数序列的谓词。
由于诸如(',')/ 2等控制构造也是Prolog中的谓词,因此上述谓词谓词不是素数公式,在这里是正确的:
3.81目标:将要执行的谓词(请参见body,query和7.7.3)。
这与一阶逻辑词汇有很大不同,在一阶逻辑词汇中,诸如连词(∧)之类的逻辑连接词不被视为谓语,因此也不是语言签名的一部分。此ISO核心标准特定语言与Prolog的同源性有关。基本上,我们可以在术语之间自由切换,例如(',')/ 2作为函子和具有相同函子的目标。这是一个示例,可以在Prolog中完成:
?- expand_goal(H, G), G.
后者在一阶逻辑中不可用,因为一阶逻辑不允许这种“元编程”。约翰·劳埃德(John W. Lloyd)曾尝试创建另一种语言,即受Prolog启发的语言,该语言也将以不同的方式处理“元编程”。语言是:
Gödel的元逻辑设施为执行分析,转换,编译,验证和调试以及其他任务的元程序提供支持。 https://en.wikipedia.org/wiki/G%C3%B6del_(programming_language)
在这种情况下应该看到ISO核心标准,它反映了Prolog关于“元编程”的非常特殊的功能,它远离一阶逻辑。这意味着ISO核心标准中的术语属于人工词汇,分别是专门为Prolog和ISO核心标准创建的术语。
它不是在计算机科学,数学逻辑或现实世界中其他地方可以找到的语言。到目前为止,没有任何要纠正或调整的内容,因为它是为ISO核心标准而创建的术语,并且对计算机科学,数学逻辑或现实世界中其他地方的某些使用所做的任何修改都是毫无根据的。 / p>
DCG草案标准出现了类似的构造术语,这是人们多年来的努力,直到被人们宠爱的“推回”被“半上下文”取代。 :-( :-)由于Ulrich Neumerkel保存了DCG草案标准的所有版本,因此您可以观察所构造术语的演变。
我不知道是否有可能挖掘出一个文档集,以显示ISO核心标准中术语的演变。谓词指示符是N / A形式的Prolog术语,谓词不是Prolog术语,但抽象地是对