Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу из turbo prolog в visual prolog - где будут отличия в коде?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Sasha_Sasha Sasha_Sasha вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.12.2015
По умолчанию из turbo prolog в visual prolog - где будут отличия в коде? - 21.12.2015, 20:37

я попыталась перевести из турбо пролога в пролог 7,5.. но куча ошибок появляется.. (пролог очень плохо знаю). скоро сдавать,а ничего не выходит :((

prolog Код:
% Copyright

implement main
    open core, console, string

domains
list = integer*.
class predicates
start: ()nondeterm anyflow.
choice: (integer)nondeterm anyflow.

create_kod: (list, integer)nondeterm anyflow.
dif: (list, list, integer, integer)nondeterm anyflow.
game_1: (list)nondeterm anyflow.
analiz_1: (string, list, list, integer, integer, integer)nondeterm anyflow.
compare: (integer, list, integer, integer, integer, integer, integer, integer)nondeterm anyflow.

start2: ()nondeterm anyflow.
game2: (integer, integer)nondeterm anyflow.

game_2_1: (list, list, list, list, integer, integer, integer)nondeterm anyflow.
new_list: (list, list, integer, list, integer)nondeterm anyflow.
analiz_2_1: (list, list, list, list, list, integer, integer, integer, integer, integer)nondeterm anyflow.

game_2_2:(list, integer, integer, integer, list)nondeterm anyflow.
analiz_2_2:(list , list, integer, integer, integer, integer, list)nondeterm anyflow.
change: (list, integer, integer, list)nondeterm anyflow.
change1:(integer, integer, integer, integer)nondeterm anyflow.
change2: (list, list, list, integer, integer, integer, integer, integer, list)nondeterm anyflow.

random_no_List_N: (list, list, integer, integer)nondeterm anyflow.
dif2: (list, list, list, list, integer, integer, integer)nondeterm anyflow.

add_list: (list, integer, list)nondeterm anyflow.
del_list: (list, list)nondeterm anyflow.
write_list: (list)nondeterm anyflow.
%end: (integer) nondeterm anyflow.
endd: (char) nondeterm anyflow.

/* начало программы */

clauses
start () :- (" Выдающийся ум"),
write("              Правила иры:       "), nl,nl,
write("Один игрок загадал число из 5 цифр, другой должен его отгадать."),nl,
write("После ввода очередного числа сообщается: сколько цифр угадано"),nl,
write("¬но стоят не на своих местах ( коровы ), и сколько цифр угадано,"),nl,
write("которые находятся на своих местах ( быки )"),nl,nl,nl,
    write("Выбор игрока:"), nl,nl,
         write("'k' - Компьютер"),nl,
         write(" P.S.:Для просмотра введите f3"), nl,nl,
         write("'v' - Вы"),nl,
         N = readChar (),
         choice (N).

choice('k') :- create_kod([],5).
choice('v') :- start2.
choice(_) :- write ("Попробуйте ещё раз!"),
         start.
 /* создание числового кода */
 create_kod(List, N) :- N=0, game_1(List).
create_kod (List, N) :- X = math::random(),
                    Ch = 9*X,
                    dif (List, List, Ch, N).

dif([], List, Ch, N) :- N1 = N-1,
                        create_kod ([Ch|List], N1).

dif([Ch|_], List, Ch, N) :- create_kod (List, N).

dif ([_|R],List, Ch, N) :- dif (R, List, Ch, N).

/* начало игры, где игрок - человек*/

game_1 (List) :- Str=readline(), analiz_1(Str, _, List, 5, 0, 0 ).

analiz_1("f3", [], List, _, _, _) :- write_list (List), nl,
                    write ("Сыграем ещё ? "),nl,
                                    write ("y - Да"), nl,
                                    write ("n – Нет, выйти"), nl,
                                    X= readChar (),
                                    endd (X).


analiz_1 (_,[], _, N, K, B) :- N=0, B = 5,
                               write ("Количество коров = ", K),nl,
                               write ("Количество быков = ", B),nl,
                               write(" Вы угадали число !!! "), nl,
                               write(" Сыграем ещё ? "),nl,
                               write("y - Да"), nl,
                               write("n – Нет, выйти"),nl,
                               X = readchar (),
                               endd (X).

analiz_1 (_,[], List, N, K, B) :- N=0,
                           write ("Количество коров = ", K),nl,
                           write ("Количество быков = ", B),nl,
                           game_1 (List) .

analiz_1 (Str, [X|R], List, N, K, B) :-  frontstr (1, Str, S, Rest),
                                       str_int (S,X),
                                       compare (X, List, N, 5, 0, 0, K1, B1),
                                       N1 = N-1,
                                       K2 = K + K1,
                                       B2 = B + B1,
                                       analiz_1(Rest, R, List, N1, K2, B2).

compare (_, [], _, _, K, B, K1, B1) :- K1 = K, B1 = B.
compare (X, [X|R], N, N1, K, B, K1, B1) :- N = N1, B2 = B + 1, N2 = N1-1, compare (X, R, N, N2, K, B2, K1, B1).
compare (X, [X|R], N, N1, K, B, K1, B1) :- K2 = K + 1, N2 = N1-1, compare (X, R, N, N2, K2, B, K1, B1).
compare (X, [_|R], N, N1, K, B, K1, B1) :- N2 = N1-1, compare (X, R, N, N2, K, B, K1, B1).

endd('y') :- start.
endd('n') :- exit.
endd(_) :- write("Вы угадали число"),
      write("Сыграем ещё ? "),nl,
          write("y - Да"), nl,
          write("n - Нет, выйти"),nl,
          N = readchar (),
          endd (N).

Последний раз редактировалось Sasha_Sasha; 21.12.2015 в 20:40
Ответить с цитированием
  (#2 (permalink)) Старый
Sasha_Sasha Sasha_Sasha вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.12.2015
По умолчанию 21.12.2015, 20:38

prolog Код:
start2 () :- write ("13579"),
          nl,
          write("Количество коров = "), readint(K),
          write ("Количество быков = "), readint(B),
          game2 (K, B).

game2(_, B) :- B = 5,
               write("Компьютер угадал число. "), nl,
               write("Cсыграем ущё ? "),nl,
               write("y - „ "), nl,
               write("n – Нет, выйти"),nl,
               N= readchar (),
               endd (N).

game2(K, B) :-   K + B = 5,
                 random_no_List_N ([], [], 10, N1),
                 random_no_List_N ([], [], N1, N2),
                 game_2_2 ([1, 2, 3, 4, 5], N1, N2, B, [] ).


game2(K, B) :-   K + B = 0,
                 random_no_List_N ([], [], 10, N1),
                 random_no_List_N ([], [], N1, N2),
                 game_2_2 ([6, 7, 8, 9, 0], N1, N2, B, [] ).

game2(K, B) :-  X = math::random(),
                N = 5*X+1,
                game_2_1([1,3,5,7,9], [], [], [2,4,6,8,0], K, B, N).

game_2_1 (Kod, Korovi, Biki, Chisla,K, B, N) :-

                                  new_list (Kod, Chisla, N, Kod_1, 1),
                                  write(Kod_1),nl,
                                  write("Количество коров = "), readint(K1),
                                  write ("Количество быков = "),readint(B1),
                analiz_2_1 (Kod, Kod_1, Korovi, Biki, Chisla,K, B,K1, B1, N).

/* случай, когда ничего не известно */
analiz_2_1(Kod, _, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 = K,
                                      B1 = B,
                                      random_no_List_N (Korovi, Biki, N, N1),
                                                       game_2_1 (Kod, Korovi, Biki, Chisla,K, B, N1).

 /* случай, когда увеличилось число коров */
 analiz_2_1(_ ,Kod_1, _, Biki, _,K, B,K1, B1, _) :- K1 > K,
                                         B1 = B,
                                         K1 + B = 5,
                                         write ("Поиск быков"),
                                         random_no_List_N ([], Biki, 10, N1),
                                         random_no_List_N ([], Biki, N1, N2),
                                         game_2_2 (Kod_1, N1, N2, B, Biki).




analiz_2_1(_ ,Kod_1, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 > K,
                                              B1 = B,
                                              add_list (Korovi, N, Korovi_1),
                                              del_list (Chisla, Chisla_1),
                                   random_no_List_N (Korovi_1, Biki, 10, N1),
                       game_2_1 (Kod_1, Korovi_1, Biki, Chisla_1, K1, B, N1).
 /* случай, когда уменьшилось количество коров */

analiz_2_1(Kod, _, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 < K,
                                                       B1 = B,
                                             add_list (Korovi, N, Korovi_1),
                                             del_list (Chisla, Chisla_1),
                                   random_no_List_N (Korovi_1, Biki, 10, N1),
                          game_2_1 (Kod, Korovi_1, Biki, Chisla_1, K, B, N1).

/* случай, когда увеличилось количество быков*/

analiz_2_1(_ , _, _, _, _,K, B,K1, B1, _) :- K1 = K,
                                         B1 > B,
                                         B1 = 5,
                                        write("Компьютер угадал число."), nl,
                                         write("Сыграем ещё ? "),nl,
                                         write("y - Да"), nl,
                                         write("n - Нет, выйти"),nl,
                                         N = readchar (),
                                         endd (N).
 analiz_2_1(_ ,Kod_1, _, Biki, _,K, B,K1, B1, _) :- K1 = K,
                                               B1 > B,
                                               K + B1 = 5,

                                         random_no_List_N ([], Biki, 10, N1),
                                         random_no_List_N ([], Biki, N1, N2),
                                         game_2_2 (Kod_1, N1, N2, B, Biki).


analiz_2_1(_ ,Kod_1, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 = K,
                                                         B1 > B,
                                                  add_list (Biki, N, Biki_1),
                                                 del_list (Chisla, Chisla_1),
                                   random_no_List_N (Korovi, Biki_1, 10, N1),
                      game_2_1 (Kod_1, Korovi, Biki_1, Chisla_1, K1, B1, N1).

 /* случай, когда уменьшилось количество быков */

analiz_2_1(Kod, _, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 = K,
                                                       B1 < B,
                                                 add_list (Biki, N, Biki_1),
                                                 del_list (Chisla, Chisla_1),
                                   random_no_List_N (Korovi, Biki_1, 10, N1),
                         game_2_1 (Kod, Korovi, Biki_1, Chisla_1, K1, B, N1).

 /* случай, когда уменьшилось количество быков, увеличилось число коров */

analiz_2_1(Kod, _, Korovi, Biki, Chisla,K, B,K1, B1, N) :- K1 > K,
                                                       B1 < B,
                                                  add_list (Biki, N, Biki_1),
                                   random_no_List_N (Korovi, Biki_1, 10, N1),
                            game_2_1 (Kod, Korovi, Biki_1, Chisla, K, B, N1).

/* случай, когда уменьшилось количество коров, увеличилось количество быков*/

analiz_2_1(_, Kod_1, Korovi, Biki, Chisla, K, B,K1, B1, N) :- K1 < K,
                                                         B1 > B,
                                                 add_list (Biki, N, Biki_1),
                                                 del_list (Chisla, Chisla_1),
                                            add_list (Chisla_1, N, Chisla_2),
                                   random_no_List_N (Korovi, Biki_1, 10, N1),
                      game_2_1 (Kod_1, Korovi, Biki_1, Chisla_2, K1, B1, N1).

game_2_2 (Kod, N1, N2, B, Biki) :- change(Kod, N1, N2, Kod_1),
                                   write(Kod_1), nl,
                                   write("Количество коров = "),  readint(_),
                                 write("Количество быков = "),  readint(B1),
                                 analiz_2_2(Kod, Kod_1, B, B1, N1, N2, Biki).

analiz_2_2( _, _, _, B1, _, _, _) :- B1 = 5,
                                  write("Компьютер угадал число."), nl,
                                  write("Сыграем ещё ? "),nl,
                                  write("y - Да"), nl,
                                  write("n - Нет, выйти"),nl,
                                  N = readchar (),
                                  endd (N).
 analiz_2_2( _, Kod_1, B, B1, N1, N2, Biki) :- B1 = B + 2,
                                          add_list (Biki, N1, Biki_1),
                                          add_list (Biki_1, N2, Biki_2),
                                     random_no_List_N ([], Biki_2, 10, N11),
                                     random_no_List_N ([], Biki_2, N11, N22),
                                       game_2_2(Kod_1, N11, N22, B1, Biki_2).

analiz_2_2(Kod, _, B, B1, N1, N2, Biki)   :- B1 = B - 2,
                                     add_list (Biki, N1, Biki_1),
                                     add_list (Biki_1, N2, Biki_2),
                                     random_no_List_N ([], Biki_2, 10, N11),                                      random_no_List_N ([], Biki_2, N11, N22),
                                         game_2_2(Kod, N11, N22, B, Biki_2).

analiz_2_2(Kod, _,  B, _, _, N2, Biki) :- random_no_List_N ([], Biki, N2, N11),
                                    game_2_2(Kod, N11, N2, B,  Biki).

 /* генерируется число, не входящее в два списка и не равное N */

random_no_List_N(Korovi,Biki, N, Rez) :- X = math::random(),
                                         Ch1 = 4*X+1,
                               dif2(Korovi, Biki, Korovi, Biki, Ch1, N, Rez).
dif2(_, _, Korovi, Biki, Ch, Ch, Rez) :- random_no_List_N(Korovi, Biki, Ch, Rez).
dif2([], [], _, _, Ch, _, Rez) :-   Rez = Ch,!.
dif2([Ch|_], _, Korovi, Biki, Ch, N, Rez)  :- random_no_List_N(Korovi, Biki, N, Rez).
dif2(_, [Ch|_], Korovi, Biki, Ch, N, Rez)  :- random_no_List_N(Korovi, Biki, N, Rez).
dif2 ([],[_|R2], Korovi, Biki, Ch, N, Rez)     :-       dif2([], R2, Korovi, Biki, Ch, N, Rez).
dif2 ([_|R1],[], Korovi, Biki, Ch, N, Rez)     :-       dif2 (R1, [], Korovi, Biki, Ch, N, Rez).
dif2 ([_|R1],[_|R2], Korovi, Biki, Ch, N, Rez) :-       dif2 (R1, R2, Korovi, Biki, Ch, N, Rez).

 /* добавление элемента к списку */

add_list (List, Ch, [Ch|List]).

/* удаление элемента из списка */

del_list ([_|List], List).

/* создание списка, в котором в позиции N ставится новый элемент */

new_list ([], _, _, [], _) :- !.
new_list([_|R1] , [X2|R2], N, [X2|Kod_1], N1) :- N = N1,
                                                 N2 = N1+1,
                                                 new_list(R1, [X2|R2], N, Kod_1, N2).
new_list([X1|R1], Chisla, N, [X1|Kod_1], N1)  :- N2 = N1+1, new_list(R1, Chisla, N, Kod_1, N2).
Ответить с цитированием
  (#3 (permalink)) Старый
Sasha_Sasha Sasha_Sasha вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.12.2015
По умолчанию 21.12.2015, 20:40

prolog Код:
/* change меняет местами элементы с номерами N1 и N2, обеспечивая при этом выполнение требования N1 < N2 */

change(List, N1, N2, Rez) :- change1 (N1, N2, N11, N22),
change2 (List,List, List, N11, N22, 1, 1, 1, Rez).

change1(N1, N2, N1, N2) :- N1 < N2.
change1(N1, N2, N2, N1).

change2 (_, _ , [], _, _, _,_ , _ ,[]).

change2 ([Ch1|R1], [_|R2] , [_|R3] , N1, N2, N11, N22, N33,  [Ch1|Rez])
:-  N1 > N11,
    N111 = N11 + 1, N222 = N22 + 1, N333 = N33 + 1,
    change2 (R1, R2, R3, N1, N2, N111, N222, N333, Rez).

change2 (List1, [_|R2] , List3 , N1, N2, N1, N22, N33,  Rez)
:-  N22 < N2,
    N222 = N22 + 1,
    change2 (List1, R2, List3, N1, N2, N1, N222, N33, Rez).

change2 (List1, [Ch2|R2] , [_|R3], N1, N2, N1, N2, N33,  [Ch2|Rez])
:-  N222 = N2 + 1,
    N333 = N33 + 1,
    change2 (List1, [Ch2|R2], R3, N1, N2, N1, N222, N333, Rez).

change2 ([Ch1|R1], List2 , [Ch3|R3], N1, N2, N1, N22, N33,  [Ch3|Rez])
:-  N33 < N2,
    N333 = N33 + 1,
    change2 ([Ch1|R1], List2, R3, N1, N2, N1, N22, N333, Rez).

change2 ([Ch1|R1], List2 , [_|R3], N1, N2, N1, N22, N2,  [Ch1|Rez])
:-  N333 = N2 + 1,
    change2 ([Ch1|R1], List2, R3, N1, N2, N1, N22, N333, Rez).

change2 (List1, List2 , [Ch3|R3], N1, N2, N1, N22, N3,  [Ch3|Rez])
:-  N333 = N3 + 1,
    change2 (List1, List2, R3, N1, N2, N1, N22, N333, Rez).

write_list([]).
write_list([Ch|R]) :- write(Ch), write_list(R).

run():- start, fail; _ = readLine().
end implement main

goal
    console::run(main::run).
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,961
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 21.12.2015, 21:20

Вот эти замены надо сделать обязательно:
frontstr(1, Str, S, Rest) -> front(Str, 1, S, Rest)
str_int(S,X) -> X=toTerm(S)
exit -> write("До свидания")
readint(B) -> B=read()

Но дальше идёт несоответствие типов, которое формально не устранить - надо разбираться в логике программы. У меня создалось впечатление, что исходная прога на Турбо Прологе была или неработающая или сильно изменена при переделке под VIP.
Ответить с цитированием
  (#5 (permalink)) Старый
Sasha_Sasha Sasha_Sasha вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.12.2015
По умолчанию 21.12.2015, 22:00

Это я все изменила.
теперь выдает ошибку - error c503 : Expression is used where a formula is expected

на
clauses
start () :- (" Выдающийся ум"),
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Sasha_Sasha Sasha_Sasha вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.12.2015
По умолчанию 21.12.2015, 22:01

Цитата:
Сообщение от Винитарх Посмотреть сообщение
Вот эти замены надо сделать обязательно:
frontstr(1, Str, S, Rest) -> front(Str, 1, S, Rest)
str_int(S,X) -> X=toTerm(S)
exit -> write("До свидания")
readint(B) -> B=read()

Но дальше идёт несоответствие типов, которое формально не устранить - надо разбираться в логике программы. У меня создалось впечатление, что исходная прога на Турбо Прологе была или неработающая или сильно изменена при переделке под VIP.
Это я все изменила.
теперь выдает ошибку - error c503 : Expression is used where a formula is expected

на
clauses
start () :- (" Выдающийся ум"),
Ответить с цитированием
  (#7 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 563
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 21.12.2015, 22:38

start () :- write(" Выдающийся ум"),
Ответить с цитированием
Ads
Ответ

Метки
visual prolog 7.5

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевести с turbo prolog на swi prolog Влад11 Prolog 5 13.12.2015 20:24
Нужно переделать программу из Turbo Prolog в Visual Prolog Hedgehok Prolog 0 09.05.2015 02:37
Перенос консольной программы с Turbo Prologa в Visual Prolog - Заказать программу Vladisliv Prolog 4 10.01.2015 19:19
Нужно перевести код из Turbo Prolog в Visual Prolog 5.2 Irina1094 Prolog 8 30.11.2014 22:52
Перенос программ из {TurboProlog.....Visual Prolog 5.2} в Visual Prolog 7 imported_Jenny_ Prolog 30 25.03.2013 19:15
Нужно перевести код из Turbo Prolog в Visual Prolog GGHz Prolog 7 08.12.2012 19:46
код из turbo prolog в visual prolog posleg Prolog 4 13.06.2011 00:33
Помогите переделать задачу из Turbo Prolog в Visual Prolog 5 imported_Anneta Prolog 3 23.12.2010 22:59
Кто возьмется переписать маленькую программу с Turbo Prolog на Visual Prolog 5.0 (за плату) olik567 Prolog 4 07.10.2009 17:46
Кто возьмется переписать маленькую программу с Turbo Prolog на Visual Prolog 5.0 (за плату) Игоревна Задания за деньги 16 04.01.2008 17:20
Как переделать Prolog-D на Turbo-Prolog Anonymous Prolog 19 02.01.2004 20:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов