Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Задача о планировании воздушного путешествия Visual Prolog 8.0
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
GirlAndCat GirlAndCat вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.03.2018
По умолчанию Задача о планировании воздушного путешествия Visual Prolog 8.0 - 22.03.2018, 23:11

Здравствуйте,
Visual Prolog 8.0 ругается на строчку "nondeterm path(s,s,list)" (идет сразу после predicates)
помогите подправить

Полный код:
prolog Код:
% Copyright

implement main
    open core

domains
     s=symbol.
     list=s*.
     a=race(s,s,integer,integer).
     tree=a*.

predicates
nondeterm path(s,s,list)
     nondeterm path1(s,list,list,integer)
     nondeterm try(list)
     nondeterm try1(list,list,integer)
     nondeterm member(s,list)
     nondeterm member(a,tree)
     show
     nondeterm exist(s,s,integer).
     nondeterm exist1(s,s,integer,integer,integer).
database
     race(symbol,symbol,integer,integer).

     clauses
////////База Данных
     race(lublyan,london,1,19).
     race(lublyan,london,2,16).
     race(lublyan,london,4,1).
     race(lublyan,zurih,4,2).
     race(lublyan,edinburg,4,15).
     race(lublyan,london,5,21).
     race(lublyan,zurih,3,22).
     race(london,lublyan,2,21).
     race(london,milan,2,8).
     race(london,edinburg,3,5).
     race(london,edinburg,4,21).
     race(london,zurih,4,5).
     race(milan,zurih,3,17).
     race(milan,london,5,16).
     race(milan,edinburg,4,16).
     race(zurih,milan,4,15).
     race(zurih,lublyan,4,21).
     race(zurih,edinburg,4,17).

////////Или Х находится в списке
     member(X,[X|_]).
     member(X,[_|Tail]):-
        member(X,Tail).
/////////Существет ли рейс (Откуда,Куда,День,МаксДопускВремя,ВремяПолета)
     exist1(X,Y,Day,TimeLimit,Time):-
        race(X,Y,Day,Time),Time<TimeLimit.
/////////Существет ли рейс (Откуда,Куда,День)
     exist(X,Y,Day):-
        race(X,Y,Day,_).
///////////Вывод
     show:-
        race(A,B,Day,Time),
        write("   Time:",Time,"   Day:",Day,"   Race:", A,"->",B),nl,fail.
     show.
////////////Поиск в глубину(Не обеспечит минимальный путь)
///////////В четверг из Откуда в Куда     (+Откуда,+Куда,-Путь)
     path(A,Z,Path):- path1(A,[Z],Path,24).
///////Граничные условия рекрсии: Если достигли Окуда, то возращяем путь.
     path1(A,[A|Path1],[A|Path1],_).
///////////Путь ищем с конца, по этому передли 24(последнее допустимое время)
     path1(A,[Y|Path1],Path,Time):-
///////Смотрим Откуда-Х , можно политеть Куда-У, при том, что щяс Вермя-Time,
///////так как поиск от последнего, то NextTime<Time должно быть
        exist1(X,Y,4,Time,NextTime),
//////проверка чтоб мы 2 раза в один город не летали
        not(member(X,Path1)),
////////Если удачно, то ищем уже не с (A в Y),a c (A в Х),
////////так как с Х в У мы попадем точно
        path1(A,[X,Y|Path1],Path,NextTime).

/////////Ищем путь за 4 дня( без учета времени) Пролет по городам из 3 задание
     try(Path):- try1([london],Path,5).////конечный пункт -лондон в пятницу
//////граничное условие если во вторник мы можем полететь из лондона по найденому пути(опять с конца)
     try1([X|Path1],[london,X|Path1],2):-
        exist(london,X,2).
//////Добавляем новый пункт в этот день можно полететь из одного города в другой
     try1([Y|Path1],Path,Day):-
        exist(X,Y,Day),
        not(member(X,Path1)),
        PrevDay=Day-1,
/////Ищем дальше в предыдущий день
        try1([X,Y|Path1],Path,PrevDay).

        clauses
    run() :-


end implement main

goal
    write("---SHOW GRAPH---"),nl,
     show,
     write("---SEEK  4day---"),nl,
     path(lublyan,edinburg,X),
     write("Path: ",X,"\n"),
     write("---Traveling---"),nl,
     try(Y),
     write("Way: ",Y,"\n"),!.
     console::runUtf8(main::run).

Полное задание имеет формулировку:
"Написать на языке Prolog программу, которая дает советы по планированию воздушного путешествия. Эта программа должна отвечать на вопросы, наподобие приведенных ниже: 1) По каким дням недели есть прямые рейсы из Лондона в Любляну? 2) Как в четверг можно добраться из Любляны в Эдинбург? 3) Мне нужно посетить Милан, Любляну и Цюрих; вылетать нужно из Лондона и вернуться обратно в Лондон в пятницу. В какой последовательности мне стоит посещать эти города, чтобы ни разу на протяжении поездки не пришлось совершать более одного перелета в день."


С уважением.
Ответить с цитированием
  (#2 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 986
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 23.03.2018, 00:48

Цитата:
Сообщение от GirlAndCat Посмотреть сообщение
Здравствуйте,
Visual Prolog 8.0 ругается на строчку "nondeterm path(s,s,list)" (идет сразу после predicates)
помогите подправить
Вы взяли код из не помню какой древней версии и пытаетесь его откомпилировать версией 8.
Откройте документацию по 7.х-8 версиям по крайней мере (у Винитарха хорошая книга) и пропишите так, как требует 7.х-8 концепция.
Если читаете по-английски, то на сайте фирмы посмотрите.
Ответить с цитированием
  (#3 (permalink)) Старый
GirlAndCat GirlAndCat вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.03.2018
По умолчанию 23.03.2018, 01:09

Цитата:
Сообщение от VictorY Посмотреть сообщение
Вы взяли код из не помню какой древней версии и пытаетесь его откомпилировать версией 8.
Откройте документацию по 7.х-8 версиям по крайней мере (у Винитарха хорошая книга) и пропишите так, как требует 7.х-8 концепция.
Если читаете по-английски, то на сайте фирмы посмотрите.
Да, копипаст с киберфорума, автор не заходил уже 4 года, так что думаю спрашивать бесполезно.
Документацию на оф сайте смотрела, учебник Винитарха не смотрела.
Искала фрилансеров за денежку - не нашла :((( Так что если фрилансеры есть... готова оплатить:(
Ответить с цитированием
  (#4 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 23.03.2018, 08:26

попробуйте в секции предикатов (predicates) вместо
nondeterm path1(s,list,list,integer)
show

надо писать что-то такое
path1:(s,list,list,integer) nondeterm.
show : ().
Ответить с цитированием
  (#5 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 24.03.2018, 01:02

VIP 8.01 (консольный проект):
Visual Prolog Код:
implement main
    open core, console

domains
    s = string.
    list = s*.

class predicates
    path : (s, s, list [out]) nondeterm.
    path1 : (s, list, list [out], integer) nondeterm.
    try0 : (list [out]) nondeterm.
    try1 : (list, list [out], integer) nondeterm.
    show : ().
    exist : (s, s, integer) nondeterm (i,i,i) (o,i,i).
    exist1 : (s [out], s, integer, integer, integer [out]) nondeterm.

class facts
    race : (string, string, integer, integer).

clauses
%База Данных
    race("lublyan", "london", 1, 19).
    race("lublyan", "london", 2, 16).
    race("lublyan", "london", 4, 1).
    race("lublyan", "zurih", 4, 2).
    race("lublyan", "edinburg", 4, 15).
    race("lublyan", "london", 5, 21).
    race("lublyan", "zurih", 3, 22).
    race("london", "lublyan", 2, 21).
    race("london", "milan", 2, 8).
    race("london", "edinburg", 3, 5).
    race("london", "edinburg", 4, 21).
    race("london", "zurih", 4, 5).
    race("milan", "zurih", 3, 17).
    race("milan", "london", 5, 16).
    race("milan", "edinburg", 4, 16).
    race("zurih", "milan", 4, 15).
    race("zurih", "lublyan", 4, 21).
    race("zurih", "edinburg", 4, 17).

%Существет ли рейс (Откуда,Куда,День,МаксДопускВремя,ВремяПолета)
    exist1(X, Y, Day, TimeLimit, Time) :-
        race(X, Y, Day, Time),
        Time < TimeLimit.
%Существет ли рейс (Откуда,Куда,День)
    exist(X, Y, Day) :-
        race(X, Y, Day, _).
%Вывод
    show() :-
        race(A, B, Day, Time),
        write("   Time:", Time, "   Day:", Day, "   Race:", A, "->", B),
        nl,
        fail.
    show().
%Поиск в глубину(Не обеспечит минимальный путь)
%В четверг из Откуда в Куда     (+Откуда,+Куда,-Путь)
    path(A, Z, Path) :-
        path1(A, [Z], Path, 24).
%Граничные условия рекрсии: Если достигли Окуда, то возращяем путь.
    path1(A, [A | Path1], [A | Path1], _).
%Путь ищем с конца, по этому передли 24(последнее допустимое время)
    path1(A, [Y | Path1], Path, Time) :-
%Смотрим Откуда-Х , можно политеть Куда-У, при том, что щяс Вермя-Time,
%так как поиск от последнего, то NextTime<Time должно быть
        exist1(X, Y, 4, Time, NextTime),
%проверка чтоб мы 2 раза в один город не летали
        not(X in Path1),
%Если удачно, то ищем уже не с (A в Y),a c (A в Х),
%так как с Х в У мы попадем точно
        path1(A, [X, Y | Path1], Path, NextTime).

%Ищем путь за 4 дня( без учета времени) Пролет по городам из 3 задание
    try0(Path) :-
        try1(["london"], Path, 5).  %конечный пункт -лондон в пятницу
%граничное условие если во вторник мы можем полететь из лондона по найденому пути(опять с конца)
    try1([X | Path1], ["london", X | Path1], 2) :-
        exist("london", X, 2).
%Добавляем новый пункт в этот день можно полететь из одного города в другой
    try1([Y | Path1], Path, Day) :-
        exist(X, Y, Day),
        not(X in Path1),
%Ищем дальше в предыдущий день
        try1([X, Y | Path1], Path, Day - 1).

    run() :-
        write("---SHOW GRAPH---"),
        nl,
        show(),
        write("---SEEK  4day---"),
        nl,
        path("lublyan", "edinburg", X),
        write("Path: ", X, "\n"),
        write("---Traveling---"),
        nl,
        try0(Y),
        write("Way: ", Y, "\n"),
        _ = readchar(),!;
        write("Что-то не так..."),
        _ = readchar().

end implement main

goal
    console::run(main::run).
Ответить с цитированием
Пользователь сказал cпасибо:
GirlAndCat (25.03.2018)
Ads.
  (#6 (permalink)) Старый
Ваня8 Ваня8 вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2018
По умолчанию 26.03.2018, 16:19

Цитата:
Сообщение от VictorY Посмотреть сообщение
у Винитарха хорошая книга
Где можно взять книгу для 8 версии?

Ответить с цитированием
  (#7 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 26.03.2018, 19:23

Цитата:
Сообщение от Ваня8 Посмотреть сообщение
Где можно взять книгу для 8 версии?
Практически все примеры из книги будут работать в восьмой версии. В восьмёрке добавилось одно ключевое слово otherwise, которого не было в версии 7.5. Остальные изменения незначительны с т.з. начинающего.
Поэтому издавать книгу по восьмой версии пока нет причин.
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по Visual Prolog. Redapple Prolog 7 02.12.2015 18:35
Логическая задача в Visual Prolog 7.4 anon49 Prolog 3 27.03.2015 19:15
задача на Visual Prolog за плату Student93 Prolog 0 10.12.2014 20:00
Visual Prolog 7.4 задача про семью Yaroslove Prolog 20 28.04.2014 23:45
Логическая задача Visual Prolog AndreSan Prolog 0 07.12.2011 12:24
Планирование воздушного путешествия *NJenya* Prolog 8 06.12.2011 00:24
Задача на Visual Prolog ket Prolog 0 13.06.2011 14:41
логическая задача на Visual Prolog 5.2 Anuta88 Prolog 1 12.04.2011 02:26
задача в Visual Prolog 5.2 Anuta88 Prolog 0 06.04.2011 20:59
задача об обедающих философах на visual prolog Nessy Prolog 6 23.01.2009 16:07



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