
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Сообщ.
#1
,
|
|
|
умножение x*n путем сложения
Пробывал с консоли и в самом test.pl ![]() ![]() mult(x,m) :- mult(x,m-1)+x. goal x=mult(2,5), write(x). Ни в какую ни даёт запустить, что тут не так написано ? |
Сообщ.
#2
,
|
|
|
рекурсивное правило есть, а граничного условия (выхода из рекурсии) нет.
|
Сообщ.
#3
,
|
|
|
Хмм, а что за правило выхода из рекурсии ? не подскажите
Добавлено он не только, ругается и на эту строку ![]() ![]() x=mult(2,5), write(x). Мол используются статические методы в этом случае даёт всё время false ![]() ![]() multi(0,0). multi(s(X),Y,Z):- multi(X,Y,W), plus(W,Y,Z). |
Сообщ.
#4
,
|
|
|
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. Добавлено Наоборот x и m в параметрах multi поставила Добавлено И нельзя переменной присваивать предикат Добавлено Вообще предикат - логическая функция, возвращает успех/неудача. Если согласование (выполнение) предиката заканчивается неудачей, то включается механизм возврата. А чтобы предикат вернул какой-то результат, нужно завести для него аргумент. |
Сообщ.
#5
,
|
|
|
Хмм на 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 ему не нужны, но почему-то переполняется стэк Добавлено Прям как и у меня было |
Сообщ.
#6
,
|
|
|
В Турбопрологе работает. swi не знаю
|
Сообщ.
#7
,
|
|
|
хмм интересно интересно, даже с учебного компьютера пробовал. А вот с факториалом задачка работает, хмм по логике должно работать, но вот что не так не пойму. Хмм что делать
![]() Спасибо и на этом буду смотреть что не так. Добавлено да и на gnu prolog тоже не пашет, не только на swi Добавлено да и на turbo prolog вот что пишет http://img.prado.lt/?v=tprolog.png Добавлено ха скомпилировал на turbo prolog, а вот что ему не нравится в самом прологе. Нужно будет анализировать |
Сообщ.
#8
,
|
|
|
Цитата xpoint @ да и на turbo prolog вот что пишет http://img.prado.lt/?v=tprolog.png Это не ошибка. Нажмите на F10. |
Сообщ.
#9
,
|
|
|
Спасибки огромное, только теперь нужно заставить работать на swi prolog. Если заставлю, покажу пример всем. Чтобы если, что и другие знали что и как
![]() |
Сообщ.
#10
,
|
|
|
В главном меню найдите опцию "директивы компилятора" и поставьте nondeterm warnings в off.
|
Сообщ.
#11
,
|
|
|
А вот и полное решение на 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). |