На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Может кто хорошо шарит в пролог
    умножение x*n путем сложения

    Пробывал с консоли и в самом test.pl

    ExpandedWrap disabled
      mult(x,m) :- mult(x,m-1)+x.
       
      goal
      x=mult(2,5),
      write(x).


    Ни в какую ни даёт запустить, что тут не так написано ?
    Сообщение отредактировано: xpoint -
      рекурсивное правило есть, а граничного условия (выхода из рекурсии) нет.
        Хмм, а что за правило выхода из рекурсии ? не подскажите

        Добавлено
        он не только, ругается и на эту строку

        ExpandedWrap disabled
          x=mult(2,5),
          write(x).


        Мол используются статические методы

        в этом случае даёт всё время false
        ExpandedWrap disabled
          multi(0,0).
          multi(s(X),Y,Z):- multi(X,Y,W), plus(W,Y,Z).
          xpoint, если это Турбопролог, то все переменные пишутся с большой буквы, тогда у вас в правиле multi ошибка. И граничное условие другое.

          ExpandedWrap disabled
            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 поставила

          Добавлено
          И нельзя переменной присваивать предикат

          Добавлено
          Вообще предикат - логическая функция, возвращает успех/неудача. Если согласование (выполнение) предиката заканчивается неудачей, то включается механизм возврата.
          А чтобы предикат вернул какой-то результат, нужно завести для него аргумент.
          Сообщение отредактировано: Swetlana -
            Хмм на swipl получаю вот такую ошибку

            ExpandedWrap disabled
              ERROR: /home/vasilij/test.pl:2:0: Syntax error: Operator expected
              ERROR: /home/vasilij/test.pl:9:0: Syntax error: Operator expected


            predicates и clauses ему не нужны, но почему-то переполняется стэк

            Добавлено
            Прям как и у меня было
              В Турбопрологе работает. swi не знаю
                хмм интересно интересно, даже с учебного компьютера пробовал. А вот с факториалом задачка работает, хмм по логике должно работать, но вот что не так не пойму. Хмм что делать :(

                Спасибо и на этом буду смотреть что не так.

                Добавлено
                да и на gnu prolog тоже не пашет, не только на swi

                Добавлено
                да и на turbo prolog

                вот что пишет

                http://img.prado.lt/?v=tprolog.png

                Добавлено
                ха скомпилировал на turbo prolog, а вот что ему не нравится в самом прологе. Нужно будет анализировать
                  Цитата xpoint @
                  да и на turbo prolog

                  вот что пишет

                  http://img.prado.lt/?v=tprolog.png

                  Это не ошибка. Нажмите на F10.
                    Спасибки огромное, только теперь нужно заставить работать на swi prolog. Если заставлю, покажу пример всем. Чтобы если, что и другие знали что и как :)
                      В главном меню найдите опцию "директивы компилятора" и поставьте nondeterm warnings в off.
                        А вот и полное решение на swipl

                        ExpandedWrap disabled
                          multi(0,_,0):-!.
                          multi(N,X,Y):- N>0, N1 is N-1, multi(N1, X, Y1), Y is X+Y1.


                        Либо вот так

                        ExpandedWrap disabled
                          multi(N,X,Y):- N>0, N1 is N-1, multi(N1, X, Y1), Y is X+Y1.
                          multi(0,_,0).
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0438 ]   [ 14 queries used ]   [ Generated: 18.07.25, 04:01 GMT ]