我的简单prolog代码抛出语法错误:运算符预期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的简单prolog代码抛出语法错误:运算符预期相关的知识,希望对你有一定的参考价值。

正如标题所示,我的prolog代码抛出了语法错误。我不确定我做错了什么。我使用Swi作为我的IDE,我尝试用它来解决问题,但无济于事。继承我错误的简单prolog代码

?- 
|    male(bob)
|    male(jeff)
|    
|    female(jane)
|    female(erica)
|    
|    father(bob,jane)
|    mother(erica, jane)
|    
|    ?-mother(erica,X).
ERROR: Syntax error: Operator expected
ERROR: male(bob)
ERROR: ** here **
ERROR: 
male(jeff)

female(jane)
female(erica)

father(bob,jane)
mother(erica, jane)

?-mother(erica,X) . 
答案

Prolog开发分为两个阶段:编写程序并在Prolog shell中与它进行交互。这两个阶段是分开的。你不是在shell中编写你的程序,至少不是直接编写。

将您的事实保存在一个名为family.pl的文件中(在每个事实的最后都加上一个点.!),然后启动Prolog shell。在shell中,您可以使用加载程序

?- consult(family).

要么

?- consult('family.pl').

请注意,在第一种情况下,您不使用.pl扩展名,但在第二种情况下,如果您使用扩展名,则应在文件名周围使用单引号(')。

现在您可以运行查询:

?- mother(erica, X).
X = jane.

还有一些其他方法可以加载文件,例如将文件名放在方括号[]之间而不是使用consult,或者(对于许多Prolog系统)只需在命令行上添加文件名。

另一答案

prolog中的语句以点结尾:

male(jeff).
female(jane).
female(erica).
father(bob,jane).
mother(erica, jane).

以上是关于我的简单prolog代码抛出语法错误:运算符预期的主要内容,如果未能解决你的问题,请参考以下文章

为啥三元运算符在我的代码中不起作用?

Actionscript 2“')' 预期”错误

编程新手。构建简单的银行应用程序 - 令牌“;”上的语法错误, 预期。 - Eclipse 中的错误(包括代码)

Prolog:类型错误:“可评估”预期,找到`[]'(empty_list)

Lua 错误处理

我的 Datanova 数据统一器模型映射抛出“规则解析错误。跨度预期 '(' at )”