Syntax 序言:语法正确的对象+;关系与结构
我不熟悉Prolog,并逐渐通过Ivan Bratko的《人工智能的Prolog编程》(第四版)学习 在做练习2.1时。(第39页),我不明白为什么Syntax 序言:语法正确的对象+;关系与结构,syntax,prolog,Syntax,Prolog,我不熟悉Prolog,并逐渐通过Ivan Bratko的《人工智能的Prolog编程》(第四版)学习 在做练习2.1时。(第39页),我不明白为什么5(X,Y)在语法上是不正确的,而+(北,西)是正确的。起初我认为这与函子是一个数字这一事实有关(因为我认为这只能是一个原子),但根据书中的说法,原子也可以是一个数字。然后我认为这是一个问题,因为参数是变量,但我不明白为什么这会给语法正确性带来问题。有人能给我指出正确的解释方向吗 此外,我想知道关系和结构之间的确切区别是什么。虽然日期(2001年5月
5(X,Y)
在语法上是不正确的,而+(北,西)
是正确的。起初我认为这与函子是一个数字这一事实有关(因为我认为这只能是一个原子),但根据书中的说法,原子也可以是一个数字。然后我认为这是一个问题,因为参数是变量,但我不明白为什么这会给语法正确性带来问题。有人能给我指出正确的解释方向吗
此外,我想知道关系和结构之间的确切区别是什么。虽然日期(2001年5月1日)
(第35页)被视为一种结构,但我想知道我们是否可以对第一章中的早期示例说同样的话。例如,第一章中的关系parent(pam,bob)
也是一种所谓的结构,还是我把事情弄糊涂了
提前谢谢
我不明白为什么5(X,Y)在语法上是不正确的,而+(北,西)是正确的
一个数字不是一个原子,而是一个数字
第33页第2.1.1节原子和数字内容如下:
Atoms can be constructed in three ways:
1. Strings of letters, digits and the underscore character,
starting with a lower-case letter.
2. Strings of special characters such as + - * / < > = : . & _ ~
3. Strings of characters enclosed in single quotes.
关系和结构之间的确切区别是什么
第4页第1.1节通过事实定义关系
通常,关系定义为其所有实例的集合。例如,parent(tom,bob)是parent关系的一个特定实例。其他情况包括:
parent(pam,bob)
parent(tom,liz)
parent(bob,ann)
parent(bob,pat)
parent(pat,jim)
第35页第2.1.3节结构
结构化对象(或简称结构)是具有多个组件的对象,例如
date(1, may, 2001)
point(1,1)
seg(P1,P2)
seg(point(1,1),point(2,3))
(a + b) * (c - 5) % uses infix operator
*(+(a,b),-(c,5)) % uses prefix operator
看着你的问题,我觉得你在寻找一个关系和结构的共同属性,可以用来区分两者。我不知道其中一个;当我考虑使用Prolog时,我不认为我应该使用关系或结构,我想的是数据的结构是怎样的,它可以简单到一个数字,也可以复杂到一个结构或一个结构的结构,然后,给定数据,达到目标所需的谓词(规则)是什么。从给出的定义来看,我能说的最好的一点是,一个特定的关系可以由许多具有相同函子的结构组成,但这不是一个能在我脑海中持续到这一时期的想法。
atom(5)
失败了。所以从技术上讲,数字不是原子。我没有那本书,所以了解他们声称原子也可以是数字的背景会很有趣。这可能也有点帮助:谢谢!我不知道有这样一个谓词,它变得有点模糊。例如,如果我有两个事实,喜欢(约翰,玛丽)。
和喜欢(约翰,苏)。
,喜欢/2
确实形成了一种关系,即使没有规则。另外,为了增加更多的模糊性,add(X,Y,Z):-Z是X+Y。
相当于:-(add(X,Y,Z),(Z是X+Y))
,可以将其视为一种结构。也许结构是任何一个复合术语,它将关系数据的含义与之关联(这使它也成为一个关系?)。是的,我不是想否定你的答案,只是想增加讨论的内容。@Lower别担心。如果我知道大部分答案,我知道评论会指出我缺乏知识的地方,然后我会学到一些东西。请继续评论,因为这有助于我学习。由于我有这本书的确切版本,我将进一步研究。@GuyCoder感谢您的广泛澄清。我认为这样说是正确的,即“结构”和“关系”只是查看数据库中数据的不同方式,只是术语问题(如,Prolog在更深层次上没有区分这两者)?我深入研究了一些权威参考文献,这就是我发现的。如果这没有回答你的问题,那么我没有更多的信息。首先Bratko让你感到疑惑,所以我检查了官方的Prolog规范(ISO/IEC 13211-1:1995(E)),它没有使用关系这个词。然而,reads关系的另一个名称是谓词
,而谓词的ISO规范reads一个标识符和一个arity
@潜伏者给了你一个很好的解释。
date(1, may, 2001)
point(1,1)
seg(P1,P2)
seg(point(1,1),point(2,3))
(a + b) * (c - 5) % uses infix operator
*(+(a,b),-(c,5)) % uses prefix operator