0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
||||||
1 | ||||||
Ошибка: "Syntax error in clause body, predicate call expected"08.10.2016, 20:02. Просмотров 2837. Ответов 10
Метки нет Все метки)
(
Начал только изучать, выкидывает ошибку "Syntax error in clause body, predicate call expected". В чем проблема?
0
|
|
08.10.2016, 20:02 | |
Можете подсказать в чём ошибка "error c161 : Syntax error: '.' is expected"? Ошибка: "Strange predicate as a head in clause 0" Написал калькулятор с менюшкой. Выдает ошибку "clause for the same predicate should be group" Ошибка "project1.lpr(35,0) Fatal: Syntax error, "BEGIN" expected but "end of file" found" |
|
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
|
|
08.10.2016, 23:23 | 2 |
Скорее всего из-за того, что не тот Пролог.
Это код для Turbo Prolog или Visual Prolog 5.2
0
|
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
|
09.10.2016, 00:02 [ТС] | 3 |
Black Fregat, да это visual prolog, я на нем и компилю
0
|
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
|
||||||
09.10.2016, 00:19 | 4 | |||||
![]() Решение
Что-то странное у Вас в конце написано.. 1) Скобка не на месте. 2) Зачем там список в виде [H|T]?
Напишите так:
1
|
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
|
09.10.2016, 00:27 [ТС] | 5 |
Black Fregat, заработало, трудноват в освоении язык, большое спасибо!
0
|
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
|
|
09.10.2016, 00:27 | 6 |
Дополнительные замечания.
1) У Вас C и D перепутаны местами: результат деления нужно переводиить дальше, а остаток добавлять к списку 2) Целое деление не так пишется, по аналогии с mod: X div Y 3) Ваш вариант всегда будет выдавать 0 в начале числа
0
|
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
|||||||||||
09.10.2016, 00:38 [ТС] | 7 | ||||||||||
Black Fregat, как раз искал ошибку, спасибо! Также исправил данный фрагмент
0
|
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
|
|||||||||||
09.10.2016, 05:47 | 8 | ||||||||||
Не совсем. Отсечение (восклицательный знак) даёт команду отменить все существующие развилки.
То есть в нашем случае при срабатывании одного из этих двух правил пролог-машина не станет проверять остальные. Иначе ничто не мешает выполнить и третье. Если бы в рекурсивном правиле стоял явный запрет, отсечение бы не понадобилось, а выход из рекурсии всё равно произошёл бы. Например, так:
0
|
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
||||||
09.10.2016, 11:06 [ТС] | 9 | |||||
Black Fregat,
То есть при таком варианте в хвост списка просто заносится какое то значение, но при этом правило продолжает проверяться?
0
|
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
|
|
09.10.2016, 15:15 | 10 |
Нет, на одной итерации это не сказывается. Но образуется развилка, и при первом же откате будет бесконечная рекурсия.
0
|
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 51
|
|
09.10.2016, 22:08 [ТС] | 11 |
Black Fregat, спасибо, буду разбираться дальше!
0
|
09.10.2016, 22:08 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Ошибка "Fatal: Syntax error, "BEGIN" expected but "END" found" Ошибка "Syntax error, "BEGIN" expected but "end of file" found"
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |