这些在prolog中意味着什么?

Fer*_*rus 5 prolog swi-prolog

首先,当我在序言不同谓词读了,例如像http_server,它是这样写的:http_server(:Goal, +Options)是什么:+怎么讲啊?有时?也写.
其次有时我会看到变量在它们之前用下划线声明_Request,即使没有其他变量Request,为什么呢?

Isa*_*bie 7

+,-,:等印记被称为模式声明.它们描述了谓词参数的预期实例化,即,是否期望使用未绑定变量,实例化术语等来调用谓词.这些不是完全标准化的; 这里是对SWI-Prolog的约定的描述:http://www.swi-prolog.org/pldoc/man?section = modes

作为第一个近似,+参数是谓词的输入,你应该提供一个基础术语.一个-参数是一个输出谓词,谓词将尝试用一个术语,统一了.甲?术语可以在呼叫被部分地实例化,和谓词可以进一步实例化.甲:参数是一个元的说法,即,它是一个由谓词被称为目标(如在setof/3,例如).

在示例中http_server(:Goal, +Options),您应该使用绑定到目标的第一个参数调用此谓词,可能是谓词名称.第二个参数必须实例化,大概是一个列表,其格式在文档中进一步描述.如果把这种断言是这样,例如,如果你传递一个未绑定变量作为第二个参数,你可能会得到意外的行为或实例错误.

至于你的第二个问题(最好是分开的),以下划线开头的变量称为匿名变量.每个这样的变量每个子句只能出现一次,除了_它本身,它可能会多次出现并且在每次出现时引用单独的变量.

Prolog系统通常会对非匿名变量发出"单例变量"警告,这些变量只发生一次,因为那些可能是拼写错误或程序员忘记某些东西的标志.你使用匿名变量来表达"这里必须有某些东西(例如,谓词参数)"的概念,但我不在乎它是什么.在您的示例中,可能您调用具有"请求"参数的谓词,但在您的特定用例中,您不关心请求.