На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Фибоначи и функция Акермана на ПРОЛОГе
    Быстро ты однако!!!  (за пивом... ) :)
    Но пока не получается - он говорит "syntax error". Там должен как-то фигурировать функтор select(X,L,L1) где L соответственно список из которого мы выбираем значения для буковок (во всяком лучае по подсказкам нашей SWM)
    Но в любом случае здорово!!!
    Идея понятна, будем над ней работать дальше. Глядишь чего-нибудь получится :)
    Спасибо
      Пиво то рядом - в холодильнике :P. А с ПРОЛОГОМ извини чем смог, тем помог. Многое в ПРОЛОГЕ зависит от интерпретатора, а у меня есть только своеобразный эмулятор.  ;D ;D ;D Правда видать совсем корявый, если у тебя ругается (у меня не сказал ничего, правда уже битую минуту решает данную задачку). А про инициализацию списков, извини помочь не смогу (давно это было). ::)
        Ну вот  :)
        Ругаться перестал (я там запятую дописала - только это я и умею :( ). НО все равно все буковки у него равны нулю, видите ли!!! :(
        Да-а-а! И Холодильника с пивом у меня тоже нет. ТОлько автоматы с колой, до которых бежать несколько этажей :( :( :(
          Это оказалось намного сложнее чем я думал. :-/
          Надо еще подумать. Постараюсь до завтра, что - нибудь придумать. ;D ;D ;D
            Спасибо!   :)
              ??? A ya vot kakuu programku nashla (eto opyat' pro rebus). Obna pravda vse ravno pochemu-to ne rabotaet. Hotya ya ee i tak i syak menyala. Mozet kto-nibud' znaet chto s nei takoe?
              Vopros programme zadaetsya sleduushii:
              sdmm([0,S,E,N,D],[0,M,O,R,E],[M,O,N,E,Y])
              A ona na eto vydaet, chto vse peremennye ravny nulu. Kazetsya chto chto-to ne tak c funktorom "summe" (v pervom opredelenii)
              Pomogite kto-nibud'!!!!!!!!!!!
              :-[



              sdmm(L1,L2,L):-
                sdmm1(L1,L2,L,0,0,[0,1,2,3,4,5,6,7,8,9],_).

              sdmm1([],[],[],0,0,D,D).
              sdmm1([X1|L1],[X2|L2],[X|L],Y1,Y,D1,D):-
                sdmm1(L1,L2,L,Y1,Y2,D1,D2),
                summe(X1,X2,Y2,X,Y,D2,D).

              summe(0,0,Y1,Y1,0,D,D).
              summe(X1,X2,Y1,X,Y,D1,D):-
                select(X1,D1,D2),
                select(X2,D2,D3),
                select(X,D3,D),
                S is X1 + X2 + Y1,
                X is S mod 10,
                Y is S div 10.
                Не понятно почему используется такое определение
                sdmm1(L1,L2,L,0,0,[0,1,2,3,4,5,6,7,8,9],_).

                И что вообще делает эта программа.
                Сидел разбирался, но тоько одни баги кругом. ;D ;D ;D
                Кстати, что за ПРОЛОГ вы используете ::)
                  Это програмка из книжки И.Братко. :)
                  sdmm1(L1,L2,L,0,0,[0,1,2,3,4,5,6,7,8,9],_).  
                  Первые три переменные - это списки [0,S,E,N,D],[0,M,O,R,E],[M,O,N,E,Y] ну или другие, в зависимости от ребуса.
                  Следующие две переменные это перенос, т.е. остаток от сложения, переносимый на следующий столбик (то что "в уме" :)
                  Ну и последние две переменных - списки чисел из которых мы берем значения для наших буковок. Первый - до выбора одного из чисел, второй - после (т.к. числа не должны повторяться, мы удаляем уже использованное число из списка)
                  А функция summe по идее должна проводить сложение по столбикам. Но она что-то не хочет этого делать... :(  Почему, никак не могу понять ...

                  А вообще мы используем SWI-Prolog 5.0.6 в Minimal Internet Programming Environment (MVC). Если честно, я другим ничем никогда не пользовалась. И вообще я эти делом только 2 месяц занимаюсь...  :-/  По-этому видимо так всё со скрипом...

                  Натали  :)

                    Ура!!!!! Достал я ваш ПРОЛОГ. Сейчас что-нибудь придумаем. ;D ;D ;D
                      Ну и как он, наш Пролог?  ;)
                        Хотелось бы хуже, да некуда!!! И зачем вас такой бодяге учат. ;D ;D ;D
                          :( Меня вот тоже всё чаще стал мучить этот вопрос! :)
                            Завтра скину на форум нормальное решение. ;D ;D ;D Уже проверил вроде работает нормально, только некоторые проблемы возникают
                              посмотрел я свои запасы было время нас тоже мучали Прологом.
                              Списки,деревья, факториалы есть ,а вот фибоначи нету.
                              Жаль ну если нужны  Списки,деревья, факториалы  - Могу выложить.
                                Попробуй так:

                                Fibonacci V1:

                                fibo_bu(N,F):-fibo_bu1(0,0,1,N,F).
                                 
                                fibo_bu1(N,F,_,N,F)
                                fibo_bu1(N1,F1,F2,N,F):-
                                 N1<N, N2 is N1+1, F3 is F1+F2,
                                 fibo_bu1(N2,F2,F3,N,F).

                                Fibonacci V2:

                                fibo_td(0,0).
                                fibo_td(1,1)
                                fibo_td(N,F):-
                                 N>1, N1 is N-1, N2 is N-2,
                                 fibo_td(N1,F1), fibo_td(N2,F2),
                                 F is F1+F2.

                                Аккерман:

                                ack(0,N,Val) :- Val is N + 1.
                                ack(M,0,Val) :- M > 0, M1 is M-1, ack(M1,1,Val).
                                ack(M,N,Val) :- M > 0, N > 0, M1 is M-1, N1 is N-1,
                                               ack(M,N1,Val1), ack(M1,Val1,Val).

                                Пролог рулит :) Правда интерпретатор свой я похерил, так что сам не проверял уж извиняйте...
                                Сообщение отредактировано: tatar_0x4E -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0312 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:51 GMT ]