programmer18 1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
||||
1 |
||||
06.02.2020, 20:12. Показов 9785. Ответов 8 Метки нет (Все метки)
Всем привет! ругается на вторую строчку ERROR: c:/2.pl:2:1: Syntax error: Operator expected
__________________
0 |
Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
|
06.02.2020, 22:39 |
2 |
Подозреваю, что Вы используете SWI-Prolog, а приведён код для Turbo или Visual.
2 |
1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
|
07.02.2020, 11:13 [ТС] |
3 |
дада, работаю swi-prolog редактор. Понятно…получается надо убрать domains?
0 |
Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
|
07.02.2020, 11:23 |
4 |
Надо оставить только код из clauses
2 |
programmer18 1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
||||
07.02.2020, 11:37 [ТС] |
5 |
|||
Вот получается код, который идет до goal.
Добавлено через 5 минут Добавлено через 1 минуту
0 |
Black Fregat Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
||||
09.02.2020, 03:40 |
6 |
|||
Я же написал
Надо оставить только код из clauses В данном случае «доводить напильником»:
Не проверял работу.
1 |
programmer18 1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
||||
10.02.2020, 10:30 [ТС] |
7 |
|||
вот так пока получается. ругается на list, который в domains объявлялся. если list вообще убрать, программа выводит false. его надо как-то объявлять?
0 |
Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
|
10.02.2020, 13:06 |
8 |
В SWI предикат read не требует указания типа: Код ?- read(L). |: [1,2,3]. L = [1, 2, 3]. ?- Список вводить как положено в языке — со скобочками, запятыми и точкой в конце
1 |
1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
|
10.02.2020, 13:20 [ТС] |
9 |
спасибо огромное! все учел,подправил!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
10.02.2020, 13:20 |
9 |
0
0
Подскажите пожалуйста, почему нижеприведенный код компилируется в Visual Prolog, но при компиляции в SWI-prolog выдает ошибки:
?- ERROR: /home/dc/c0ding/prolog/l2.pl:2:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:5:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:28:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:94:30: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:99:1: Syntax error: Operator expected
domains
person = symbol.
facts
man(person)
woman(person)
father(person, person)
mother(person, person)
husband(person, person)
wife(person, person)
predicates
%nondeterm
%troyurodnaya_sestra(person, person).
nondeterm
roditel(person, person).
%nondeterm
%svodniy_brat(person, person).
%nondeterm
%sestra(person, person)
clauses
man(anatoly).
man(ivan).
man(fedor).
man(petr).
man(pavel).
man(boris).
man(anton).
man(victor).
man(andrey).
man(vasiliy).
man(sergey).
man(georgiy).
man(mark).
woman(irina).
woman(mariya).
woman(vera).
woman(larisa).
woman(anna).
woman(julia).
woman(marina).
woman(nina).
woman(elena).
woman(lidiya).
woman(oksana).
woman(yelizeta).
woman(kristina).
father(anatoly, fedor).
father(anatoly, anna).
father(anatoly, petr).
father(ivan, pavel).
father(ivan, nina).
father(ivan, marina).
father(petr, anton).
father(petr, elena).
father(pavel, victor).
father(pavel, lidiya).
father(pavel, andrey).
father(boris, vasiliy).
father(anton, yelizeta).
father(andrey, kristina).
father(andrey, sergey).
father(vasiliy, georgiy).
father(vasiliy, mark).
mother(irina, fedor).
mother(irina, petr).
mother(irina, anna).
mother(mariya, pavel).
mother(mariya, marina).
mother(mariya, nina).
mother(vera, anton).
mother(larisa, elena).
mother(anna, victor).
mother(anna, lidiya).
mother(julia, andrey).
mother(nina, vasiliy).
mother(elena, sergey).
mother(lidiya, yelizeta).
mother(oksana, kristina).
mother(oksana, georgiy).
mother(oksana, mark).
roditel(parent, child) :-
mother(parent, child) or
father(parent, child).
goal
mother(vasiliy, mark) or father(vasiliy, mark).
|
|
|
Может кто хорошо шарит в пролог
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
умножение x*n путем сложения Пробывал с консоли и в самом test.pl mult(x,m) :- mult(x,m-1)+x. goal x=mult(2,5), write(x). Ни в какую ни даёт запустить, что тут не так написано ? Сообщение отредактировано: xpoint — 28.09.11, 18:51 |
Swetlana |
|
рекурсивное правило есть, а граничного условия (выхода из рекурсии) нет. |
staff |
|
Хмм, а что за правило выхода из рекурсии ? не подскажите Добавлено 29.09.11, 04:40 x=mult(2,5), write(x). Мол используются статические методы в этом случае даёт всё время false multi(0,0). multi(s(X),Y,Z):- multi(X,Y,W), plus(W,Y,Z). |
Swetlana |
|
xpoint, если это Турбопролог, то все переменные пишутся с большой буквы, тогда у вас в правиле multi ошибка. И граничное условие другое. predicates multi(integer,real,real) goal multi(2,5,X), write(X). clauses multi(0,X,0). multi(N,X,Y):- N1=N-1, multi(N1,X,Y1), Y=X+Y1. Добавлено 29.09.11, 09:29 Добавлено 29.09.11, 09:31 Добавлено 29.09.11, 10:07 Сообщение отредактировано: Swetlana — 29.09.11, 10:07 |
staff |
|
Хмм на swipl получаю вот такую ошибку ERROR: /home/vasilij/test.pl:2:0: Syntax error: Operator expected ERROR: /home/vasilij/test.pl:9:0: Syntax error: Operator expected predicates и clauses ему не нужны, но почему-то переполняется стэк Добавлено 29.09.11, 15:47 |
Swetlana |
|
В Турбопрологе работает. swi не знаю |
staff |
|
хмм интересно интересно, даже с учебного компьютера пробовал. А вот с факториалом задачка работает, хмм по логике должно работать, но вот что не так не пойму. Хмм что делать Спасибо и на этом буду смотреть что не так. Добавлено 29.09.11, 17:22 Добавлено 29.09.11, 17:26 вот что пишет http://img.prado.lt/?v=tprolog.png Добавлено 29.09.11, 17:33 |
Swetlana |
|
Цитата xpoint @ 29.09.11, 17:21 да и на turbo prolog вот что пишет http://img.prado.lt/?v=tprolog.png Это не ошибка. Нажмите на F10. |
staff |
|
Спасибки огромное, только теперь нужно заставить работать на swi prolog. Если заставлю, покажу пример всем. Чтобы если, что и другие знали что и как |
Swetlana |
|
В главном меню найдите опцию «директивы компилятора» и поставьте nondeterm warnings в off. |
staff |
|
А вот и полное решение на swipl multi(0,_,0):-!. multi(N,X,Y):- N>0, N1 is N-1, multi(N1, X, Y1), Y is X+Y1. Либо вот так multi(N,X,Y):- N>0, N1 is N-1, multi(N1, X, Y1), Y is X+Y1. multi(0,_,0). |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Prolog
- Следующая тема
[ Script execution time: 0,0347 ] [ 15 queries used ] [ Generated: 9.02.23, 15:26 GMT ]