Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Vasi
0 / 0 / 2
Регистрация: 21.10.2009
Сообщений: 51
1

Две задачи про обезьяну с бананом,

13.11.2013, 21:41. Просмотров 1002. Ответов 0
Метки нет (Все метки)

Необходимо реализовать 2 задачи про обезьяну,банан и ящик.
Первая классическая:есть в некотором положении банан,обезьяна и ящик.Необходимо описать действия,чтобы обезьяна получила банан.Реализовал это так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
    
class predicates
    monkey:(string, string, string, integer, integer) nondeterm.
 
clauses
    classInfo(className, classVersion).
    monkey(_, _, _, _, 1):- console::write("Yami-yam banana!\n"), !.
    
    monkey(A, B, C, 0, 0):-A<>B, A<>C, B<>C,  
                                                console::write("Monkey go to box\n"), 
                                                monkey(B, B, C,  0, 0).
                                                
    monkey(B, B, C, 0, 0):-B<>C,   console::write("Monkey take box and go to bannana\n"), 
                                                monkey(C, C, C, 0, 0).    
                                                
    monkey(C, C, C, 0, 0):-        console::write("Monkey jump on box\n"), 
                                                monkey(C, C, C, 1, 0).    
                                                                                            
    monkey(C, C, C,  1, 0):-     console::write("Monkey take  bannana\n"), 
                                                monkey(C, C, C, 1, 1).                                                 
    
clauses
    run():-
        console::init(),
        A = "A ",
        B ="B",     
        C ="C",        
        E = 0,     
        F = 0,   
       monkey( A, B, C, E, F ),
       console::write("\nPress any key to continue..."),
       console::clearInput(),
        _ = console::readLine(), !.
       run():-
       succeed(),  _ = console::readLine(), !. % place your own code here
end implement main
 
goal
    mainExe::run(main::run).
Проблема с этой реализацией в том,что я неуверен все ли необходимые предикаты я реализовал?
Следующая задача формулируется так же как и предыдущая только теперь есть 2 ящика,маленький и большой.Поэтому необходимо,как я понял,чтобы маленький находился на большом и тогда обезьяна сможет схватить банан.Смог реализовать только это:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
class predicates
    monkey:(string, string, string, string, integer, integer, integer, integer) nondeterm.
 
   get_answer_str:(string)->string.
   get_answer_int:(string)->integer.
 
 
clauses
%1 - Monkey pos
%2 - Large box pos
%3 - Small box pos
%4 - Banana pos
%5 - Ape is on the large box
%6 - Ape is on the small box
%7 - Small box is up the large box
%8 - Ape has banana within hands
 
  monkey(_, _, _, _, _, _, _, 1):- console::write("Yami-yam banana!\n"), !.
  monkey(A, A, B, C, 1, 0, E, 0):-A<>C, console::write("Climbs down from the large box\n").
 
 % getflag(V):-
 get_answer_str(Prop) = Res:-
                console::write(Prop), Res = console::readLine(), console::nl.
 
 get_answer_int(Prop) = Res:-
                console::write(Prop), Str = console::readLine(), console::nl,
                Res = ::tryToTerm(integer,Str), Res >= 0, Res <= 1, !.
 get_answer_int(Prop) = Res:-
                console::write("Error: input value 0 or 1\n"), Res = get_answer_int(Prop).
 
clauses
 
    run():-
        console::init(),
        console::write( "Starting monkey test..." ), console::nl,
 
        A = get_answer_str( "Введите положение обезьяны (строка)? " ),
        B = get_answer_str( "Введите положение большого ящика (строка)? " ),
        C = get_answer_str( "Введите положение малого ящика (строка)? " ),
        D = get_answer_str( "Введите положение банана? " ),
 
        F = 0, %Обезьяна не на малом ящике
        E = get_answer_int( "Обезьяна на большом ящике (0 или 1)? " ),
        F = get_answer_int( "Обезьяна на малом ящике (0 или 1)? " ),
      %  if F = 1 then
       %     E = 0
       % end if,
 
       G = get_answer_int( "Малый ящик на большом (0 или 1)? " ),
       H = get_answer_int( "У обезьяны есть банан (0 или 1)? " ),
 
       monkey( A, B, C, D, E, F, G, H ),
 
       console::write("\nPress any key to continue..."),
       console::clearInput(),
        _ = console::readLine(), !.
 
       % fail(). % place your own code here
 
   run():-
        succeed().
 
end implement main
 
goal
    mainExe::run(main::run).
Использую Visual Prolog.Помогите пожалуйста разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 21:41
Ответы с готовыми решениями:

Задача про обезьяну и банан. Списки и рекурсия
domains position = under_banana; on_box; on_floor; at_door; at_window...

Задачи про треугольники
1)Найти периметр треугольника, если все его стороны известны. 2)Определить,...

SWI Prolog две задачи
1) Нужно определить предикат, который будет считывать с консоли строку текста...

Решенные задачи про списки, строки, файлы, БД
Вот решил выложить с позволения модератора раздела список решенных мною задач и...

Задача про обезьяну и банан
Ребят, помогите решить задачу на c# про обезьяну и банан, в программировании...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 21:41

Две не сложные задачи про ЭВМ
Помогите с решением этих двух задач, никак не могу понять( вроде первая...

Задачи про точки на окружности и про конфеты.
1) На окружности расположено N точек. Их положение определяется углом ф между...

Задача про две точки
Подскажите пожалуйста как решать такую задачу: На отрезок случайно бросаются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru