На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Фибоначи и функция Акермана на ПРОЛОГе
    :-[ Help!!!  
    Кто-нибудь представляет как должны выглядеть Фибоначи и Акерман на Прологе????
    Поделитесь с глупой девушкой  :-/
      Глупые девушки таких злобных вопросов не задают  ;D
        Откуда такой раритет откопали- ПРОЛОГ. ;D
          2GrAnd: почему раритет? :))) Нам в прошлом году в институте полгода сначала Lisp читали, а другие полгода Prolog :)
            Просто довольно специфический, узконаправленный язык. Тем более с ЛИСПОМ встречался довольно часто, а вот с ПРОЛОГМ - пардоньте не видался давно (хотя то же нам его читали) :-/ :-/ :-/
              Вообще-то, Пролог - самый используемый язык для искусственного интеллекта (но вы наверное это и без меня знали!), а никакой не раритет!!!
              А вот, хотите ещё задачку? (хотя, скорее всего не хотите...  :(  )
                 S E N D
              +  M O R E
              ----------
              M O N E Y
              Надо написать програмку, чтобы она подбирала замену буковкам.
              ;)
                Для самого простого и самого долгого метода достаточно принять метод прямого перебора все цифр для каждой буквы. ;D ;D ;D Для ускорения добавить учет неповторяемости цифр (каждой букве одна цифра). Вопрос в том, что надо - Получить правильное решение,  или решить наиболее оптимальным методом. ;D ;D ;D
                  Хе-хе, это всё я и сама знаю. Проблема в том что я не знаю как это выразить на прологе?!  :(   А вы всё смеётесь.... :(
                    Опять ты о ПРОЛОГЕ. ;)
                    Организовываешь циклы для каждой буквы от 0 до 9 и подставляешь в данное выражение и проверяешь его правильность. В ПРОЛОГЕ наверное есть же циклы и условные операторы.
                    P.S.
                    А улыбаюсь я всем с кем разговариваю ;D ;D ;D
                      Циклы в прологе только рекурсивные... (чтоб их...) И вообще тут всё как-то сложно и не так как везде (или это мне только так кажется)  Ну да ладно, как-нибудь осилим :)
                      Жалко только такой прекрасный солнечный день проводить за подобной ...  :(
                      НО все равно спасибо  ;D ;D ;D
                        Цитата Натали, 21.05.02, 16:26:55
                        Жалко только такой прекрасный солнечный день проводить за подобной ...  :(
                        Эх, Наташа... не ту ты профессию себе выбрала :)
                          Если есть адресок в почте - оставь, через пару часов вспомню, что нам давали по ПРОЛОГУ и скину. ;D ;D ;D
                            :) Да нет, это по началу трудно (надеюсь  :-/ ...) А вообще проффесия, она хорошая :)
                            Адресс: nataly99999@hotmail.com
                            И спасибо пребольшущее заранее :) :)
                              Будем думать ;D ;D ;DТолько за пивом сбегаю ;)
                                Кажись так должно быть.

                                РЕБУС (0,0,0,0,0,0,0,0).
                                РЕБУС (S,E,N,D,M,O,R,Y):-integer(S),S<9,S is S+1,
                                                  integer(E),E<9,E is E+1,
                                                  integer(N),N<9,N is N+1,
                                                  integer(D),D<9,D is D+1,
                                                  integer(M),M<9,M is M+1,
                                                  integer(O),O<9,O is O+1,
                                                  integer(R),R<9,R is R+1,                        
                                                  integer(Y),Y<9,Y is Y+1,
                                                       1000*(S+M)+100*(E+O)+10*(N+R)+D+E=
                                                       10000*M+1000*O+100*N+10*E+Y
                                                             write(S,E,N,D,M,O,R,Y),
                                                       РЕБУС(S,E,N,D,M,O,R,Y).

                                Хотя может память мне и изменяет.
                                Ну и геморррой этот ваш ПРОЛОГ ;D ;D ;D
                                  Быстро ты однако!!!  (за пивом... ) :)
                                  Но пока не получается - он говорит "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 -
                                                                Цитата spirt, 18.05.02, 16:19:32
                                                                2GrAnd: почему раритет? :))) Нам в прошлом году в институте полгода сначала Lisp читали, а другие полгода Prolog :)

                                                                А у меня - всё то же - только в пошлом семестре и  этом.  :)
                                                                  :DPrivet !!!
                                                                  K state na kakom Prologe ti programiruesg ???
                                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                  0 пользователей:


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