Что означает эта ошибка в Прологе? - PullRequest
2 голосов
/ 01 марта 2012

Я делаю небольшую программу на Прологе, чтобы узнать столицы введенной страны, но я постоянно получаю эту ошибку в строке 10 и 11:

ОШИБКА: c: / users / cesardowns / 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 ]

3 голосов
/ 01 марта 2012
  • Пролог, похоже, не похож на символ á.
  • Вы должны использовать одинарную кавычку ', а не .
  • Это write и read, а не Write и Read.

Попробуйте:

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
| ?- 
2 голосов
/ 01 марта 2012

Кроме этого, также рассмотрите возможность использования формата / 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]).
2 голосов
/ 01 марта 2012

Что ж, это означает, что у вас есть ошибка в десятой и одиннадцатой строках в вашем файле c: / users / cesar downs / documents / capital.pl и что в обеих этих строках ошибка в том, что отсутствует оператор.

На самом деле в вашем случае это не столько пропущенный оператор, а неправильный факт, что вы называете свои предикаты заглавной буквой, чтобы запускать их, пока они зарезервированы для переменных в Прологе. Это заставляет переводчика сходить с ума!

Правильная версия будет:

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, вы можете просто обернуть свой атом хотя в одинарных кавычках, как я делал в своем коде.

РЕДАКТИРОВАТЬ2: кстати попробуйте правильно сделать отступ в вашем коде. Пролог код очень трудно читать, если вы все свои предикаты онлайн.

...