Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Нахождение пути в лабиринте
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
SergAnt007 SergAnt007 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.12.2009
По умолчанию 18.05.2010, 12:04

Здравствуйте. Есть программа, которая находит путь в лабиринте, но она на версии 5.2 , а мне требуется на Visual Prolog 7.2 . Помогите пожалуйста ее переделать)
Код:
domains
  room     =  symbol
  roomlist = room*

predicates
  gallery(room,room) - nondeterm (i,o),    nondeterm (o,i)    
  neighborroom(room,room) - nondeterm (i,o)                                
  avoid(roomlist) - procedure (o)
  go(room,room) - nondeterm (i,i)
  route(room,room,roomlist) - nondeterm (i,i,i)                                
  member(room,roomlist) - nondeterm (i,i)

clauses
  gallery(entry,monsters).              gallery(entry,fountain).
  gallery(fountain,hell).             gallery(fountain,food).
  gallery(exit,gold_treasure).        gallery(fountain,mermaid).
  gallery(robbers,gold_treasure).     gallery(fountain,robbers).
  gallery(food,gold_treasure).        gallery(mermaid,exit).
  gallery(monsters,gold_treasure).    gallery(gold_treasure,exit).

  neighborroom(X,Y):-gallery(X,Y).
  neighborroom(X,Y):-gallery(Y,X).

  avoid([monsters,robbers]).

  go(Here,There):-route(Here,There,[Here]).
  go(_,_).

  route(Room,Room,VisitedRooms):-
    member(gold_treasure,VisitedRooms),
    write(VisitedRooms),nl.
  route(Room,Way_out,VisitedRooms):-
    neighborroom(Room,Nextroom),
    avoid(DangerousRooms),
    not(member(NextRoom,DangerousRooms)),
    not(member(NextRoom,VisitedRooms)),
    route(NextRoom,Way_out,[NextRoom|VisitedRooms]).

  member(X,[X|_]).
  member(X,[_|H]):-member(X,H).

goal
  go(exit,entry).
Ответить с цитированием
  (#2 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 18.05.2010, 16:18

По-моему, проще лабиринт в виде графа - обозвать все перекрёстки-развилки-тупики-двери и прочая... Если просто путь в лабиринте безо всяких "нашёл чемодан с бабками""провалился в подвал с тараканами", то Тут
Ответить с цитированием
  (#3 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,795
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 18.05.2010, 18:30

Цитата:
Здравствуйте. Есть программа, которая находит путь в лабиринте, но она на версии 5.2 , а мне требуется на Visual Prolog 7.2 . Помогите пожалуйста ее переделать)
Вот так, например:
Код:
domains
  room     =  symbol.
  roomlist = room*.

class predicates
  gallery: (room,room) nondeterm (i,o) (o,i).    
  neighborroom: (room,room) nondeterm (i,o).                                
  avoid: (roomlist) procedure (o).
  go: (room,room) nondeterm.
  route: (room,room,roomlist) nondeterm.

clauses
  gallery("entry","monsters").              gallery("entry","fountain").
  gallery("fountain","hell").             gallery("fountain","food").
  gallery("exit","gold_treasure").        gallery("fountain","mermaid").
  gallery("robbers","gold_treasure").     gallery("fountain","robbers").
  gallery("food","gold_treasure").        gallery("mermaid","exit").
  gallery("monsters","gold_treasure").    

  neighborroom(X,Y):- gallery(X,Y).
  neighborroom(X,Y):- gallery(Y,X).

  avoid(["monsters","robbers"]).

  go(Here,There):- route(Here,There,[Here]).

  route(Room,Room,VisitedRooms):- 
    list::ismember("gold_treasure",VisitedRooms), 
    write(VisitedRooms),nl.
  route(Room,Way_out,VisitedRooms):-
    Room<>Way_out,
    neighborroom(Room,Nextroom),
    avoid(DangerousRooms),
    not(list::ismember(NextRoom,DangerousRooms)),
    not(list::ismember(NextRoom,VisitedRooms)),
    route(NextRoom,Way_out,[NextRoom|VisitedRooms]).

run():- 
      init(),
      go("exit","entry"),
      fail;
    _ = readLine().
Ответить с цитированием
  (#4 (permalink)) Старый
SergAnt007 SergAnt007 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.12.2009
По умолчанию 18.05.2010, 19:09

чот не получается, не нравится ему readLine() и write(VisitedRooms).
Код:
implement main
    open core

constants
    className = "main".
    classVersion = "".

clauses
    classInfo(className, classVersion).
    domains
  room     =  symbol.
  roomlist = room*.

class predicates
  gallery: (room,room) nondeterm (i,o) (o,i).    
  neighborroom: (room,room) nondeterm (i,o).                                
  avoid: (roomlist) procedure (o).
  go: (room,room) nondeterm.
  route: (room,room,roomlist) nondeterm.

clauses
  gallery("entry","monsters").              gallery("entry","fountain").
  gallery("fountain","hell").             gallery("fountain","food").
  gallery("exit","gold_treasure").        gallery("fountain","mermaid").
  gallery("robbers","gold_treasure").     gallery("fountain","robbers").
  gallery("food","gold_treasure").        gallery("mermaid","exit").
  gallery("monsters","gold_treasure").    

  neighborroom(X,Y):- gallery(X,Y).
  neighborroom(X,Y):- gallery(Y,X).

  avoid(["monsters","robbers"]).

  go(Here,There):- route(Here,There,[Here]).

  route(Room,Room,VisitedRooms):- 
    list::ismember("gold_treasure",VisitedRooms), 
   write(VisitedRooms).
  route(Room,Way_out,VisitedRooms):-
    Room<>Way_out,
    neighborroom(Room,Nextroom),
    avoid(DangerousRooms),
    not(list::ismember(NextRoom,DangerousRooms)),
    not(list::ismember(NextRoom,VisitedRooms)),
    route(NextRoom,Way_out,[NextRoom|VisitedRooms]).

clauses
    run():- 
      console::init(),
      go("exit","entry"),
      fail;
    _ = readLine().
end implement main

goal
    mainExe::run(main::run).
Ответить с цитированием
  (#5 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,795
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 18.05.2010, 19:19

Измените open:
Код:
open core, console
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergAnt007 SergAnt007 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.12.2009
По умолчанию 18.05.2010, 19:23

Спасибо большое, Alison и aag, премного благодарен :-)
Ответить с цитированием
  (#7 (permalink)) Старый
MarinN MarinN вне форума
Member
 
Аватар для MarinN
 
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2010
По умолчанию 27.03.2011, 21:53

main.pack(59,5) error c218: Unknown class/interface 'list'

для версии 7.1 подскажите пожалуйста, как исправить это?
Ответить с цитированием
  (#8 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 27.03.2011, 22:21

Цитата:
Сообщение от MarinN Посмотреть сообщение
main.pack(59,5) error c218: Unknown class/interface 'list'

для версии 7.1 подскажите пожалуйста, как исправить это?
Забубенить 7.3)))
Там и list попродвинутее)))
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение длины пути до элемента в бинарном дереве Mozikoff Prolog 6 16.10.2011 14:38
Нахождение кротчайшего пути в метро Shhh Haskell 1 09.05.2011 15:07
пути в графах Define Prolog 3 25.04.2011 22:32
нахождение min и max пути Queezi Prolog 12 25.04.2011 22:19
Нахождение самого длинного пути с вводом значений dyalex86 Prolog 1 18.10.2010 14:19
Нахождение самого длинного пути поиском в ширину. SWI Prolog Asaumi Prolog 2 03.10.2010 14:43
Нахождение кратчайшего пути в графе Татаnt Prolog 11 27.05.2010 23:33
Нахождение пути между двумя узлами дерева Borg Prolog 2 01.11.2008 01:31
Нахождение эйлерова пути на Прологе sonechka Prolog 1 06.12.2007 19:30
Поиск кратчайшего пути в лабиринте на Builder CHIV C++ Builder 2 25.01.2005 21:30
Поиск в лабиринте lyoka Prolog 1 23.12.2004 15:33
Как определить минимальный и максимальный путь в лабиринте Катерина Prolog 1 18.11.2004 14:16



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