2014-11-21 4 views
-2

Я пытаюсь сделать программу в Прологе, чтобы проверить порядок списка номеров и вернуть ДА или НЕТ.Программа в прологе, чтобы проверить порядок списка номеров

Пример: [1, 2, 3, 4] Да

[1, 3, 4, 2] Нет

Я получаю этот код в Интернете, чтобы увидеть, если работы:

domains 
    x = integer 
    l = integer* 

predicates 
    ordered(l) 

clauses 
    ordered([X]). 

    ordered([Head|[Head1|Tail]]) :- 
     Head =< Head1, 
     ordered([Head1|Tail]). 

Output : 

Goal: ordered([1,2,3,4]) 
Yes 

Goal: ordered([3,2,4,5]) 
No 

но некоторые ошибки в появляться программы SWI-Пролог: [второй строке перед X: "Синтаксическая ошибка: Оператор ожидаемому"] [11 заказанных строк: «заказано/1: (не загружено) не указано»]

Я действительно не знаю, что делать.

+2

Это помечено как «SWI Prolog», но ваш пример кода - Turbo или Visual Prolog. Заголовки разделов ('domains' и т. Д.) Не работают в SWI Prolog. – lurker

ответ

2

Ваша программа использует синтаксис для Turbo-Prolog, PDC-Prolog или Visual Prolog. В Прологах в Эдинбургской традиции, которые включают SWI, и особенно ISO-Prolog, нет секций для предикатов и деклараций. Вместо этого весь текст состоит из статей, дополнительные декларации приведены с так называемыми директивами, например :- multifile(m/3).

В качестве исторической заметки Turbo-Prolog не придумывал такие разделы, где они присутствуют в «Марселе-Прологе», также известном как Пролог я уже. (Какой был второй Prolog, после Prolog 0 ...)

1

Как говорится в сообщении переводчика: оператор «равный или меньший» = <, а не < =.

+0

Спасибо, я редактирую ошибку, но теперь появился другой. :( –

 Смежные вопросы

  • Нет связанных вопросов^_^