Prolog中的这个错误是什么意思?

时间:2012-03-01 15:18:25

标签: prolog logic declarative

我正在Prolog中制作一个程序来查找输入国家/地区的首都,我在第10行和第11行始终收到此错误:

错误:c:/ users / cesar downs / documents / capital.pl:10:语法错误:运算符预期 错误:c:/ users / cesar downs / documents / capital.pl:11:语法错误:运算符预期

我真的不明白,继承人的代码:

capital_of(guatemala, guatemala).
capital_of(tegucigalpa, honduras).
capital_of(san_salvador, el_salvador).
capital_of(managua, nicaragua).
capital_of(san_jose, costa_rica).
capital_of(panamá, panamá).

%Rules

Capital:- write(‘Enter the country: ‘),Read(Country),Answer(Country).
Answer(Country):- capital_of(Country,City),Write(‘The capital of: ‘),Write(Country),Write(‘ is ‘),Write(City).

3 个答案:

答案 0 :(得分:3)

  • Prolog似乎不喜欢á字符。
  • 您应该使用单引号'而不是字符。
  • 它是writeread,而不是WriteRead

试试这个:

capital_of(guatemala, guatemala).
capital_of(tegucigalpa, honduras).
capital_of(san_salvador, el_salvador).
capital_of(managua, nicaragua).
capital_of(san_jose, costa_rica).
capital_of(panama, panama).

%Rules

capital :-
    write('Enter the country: '),
    read(Country),
    answer(Country).

answer(Country) :-
    capital_of(Country,City),
    write('The capital of: '),
    write(Country),
    write(' is '),
    write(City).

试运行:

| ?- consult('test.pl').
compiling /home/aioobe/tmp/prolog/test.pl for byte code...
/home/aioobe/tmp/prolog/test.pl compiled, 20 lines read

yes
| ?- capital.
Enter the country: managua.
The capital of: managua is nicaragua

yes
| ?- 

答案 1 :(得分:2)

嗯,这意味着你的第十和第十一行有错误,在你的文件c:/ users / cesar downs / documents / capital.pl中,对于这两行,错误是操作符丢失。

实际上在你的情况下,并不是缺少运算符是错误的,而是你用谓词命名你的谓词,而它是为Prolog中的变量保留的。这使翻译变得疯狂!

正确的版本是:

capital_of(guatemala, guatemala).
capital_of(tegucigalpa, honduras).
capital_of(san_salvador, el_salvador).
capital_of(managua, nicaragua).
capital_of(san_jose, costa_rica).
capital_of('panamá', 'panamá').

%Rules

capital :-
    write('Enter the country: '),
    read(Country),
    answer(Country).

answer(Country) :-
    capital_of(Country, City),
    write('The capital of: '),
    write(Country),
    write(' is '),
    write(City).

编辑:正如所指出的,还有其他问题,例如使用适当的单引号来分隔原子'和使用特殊字符,而不是用á替换a你可以像我在我的代码中那样用单引号包装你的原子。

EDIT2:btw尝试正确缩进代码。如果你将所有谓词联系在一起,Prolog代码很难阅读。

答案 2 :(得分:2)

另外,还要考虑使用format / 2。例如,而不是:

answer(Country) :-
    capital_of(Capital, Country),
    write('The capital of: '),
    write(Country),
    write(' is '),
    write(Capital).

你可以写:

answer(Country) :-
    capital_of(Capital, Country),
    format("The capital of: ~w is ~w", [Country,Capital]).