Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Перенос программ из {TurboProlog.....Visual Prolog 5.2} в Visual Prolog 7
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию Перенос программ из {TurboProlog.....Visual Prolog 5.2} в Visual Prolog 7 - 27.10.2010, 12:22

Добрый день,
помогите, пожалуйста, с VIP 7.1, никогда с ним не работала.

В VIP 5.2, помнится, можно было запустить программу на Турбопрологе без каких-либо переделок. Как это сделать в 7.1?

Заранее благодарна за любую помощь)

Цитата:
Jenny_, если по хорошему, то Вам следовало бы создать новую тему для своего вопроса, так как эта темя про книги по Visual Prolog. Поэтому отвечу кратко - надо изменять синтаксис всех разделов турбо-программы. Детальнее отвечу в теме, которую Вы, по моему настоятельному совету, всё же создадите сами и приведёте исходник проги (если он не слишком велик).
Давайте разделим проги на 3 группы.
1. Без стандартных турбопрологовских предикатов чтения readln, readint, readreal, readterm. И без использования динамических баз данных.
2. С вводом данных с клавиатуры, без ДБД.
3. С использованием стандартных предикатов для работы с ДБД.

Вот, например, прога, использующая readint

[PROLOG]
domains
list=integer*

predicates
readlist(list)
sum1(list,integer,integer,integer,integer)
result

goal
result.

clauses

result:-
readlist(L),
sum1(L,0,S1,0,C1),write("Summa1="),write(S1),nl,
write("Count1="),write(C1),nl.

readlist([H|T]):- readint(H),readlist(T).
readlist([]).

sum1([],S,S,C,C):-!.
sum1([X|T],S1,S,C1,C):-
S2=S1+X,
C2=C1+1,
sum1(T,S2,S,C2,C).
[/PROLOG]
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.10.2010, 18:01

Для переноса программ из версий {TurboProlog, ... ,Visual Prolog 5.2} в Visual Prolog 7 необходимо:
1) Создать в среде Visual Prolog 7 консольное приложение.
2) Исходник до первой компиляции Вы конечно не увидете, поэтому сразу надо скомпилить (или запустить на выполнение). После этого в браузере проекта увидите дерево файлов среди которых будет файл с расширением main.pro. Вот его родного Вы и откройте двойным щелчком.
3) В отдельном окне Вы и увидите код. Прошу не пугаться разительныими отличиями от старого синтаксиса - они не такие кардинальные, как на первый взгляд может показаться.
Цитата:
Сообщение от Visual Prolog 7
implement main
open core

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

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),
succeed(). % place your own code here
end implement main

goal
mainExe::run(main::run).
4) Первое отличие касается объявления предикатов. Теперь между именем предиката и его аргументами надо ставить двоеточие, а после аргументов указывать режим детерминизма и направление потока аргументов для каждой переменной (входной или выходной или любой).
5) Второе отличие - роль раздела goal сейчас играет предикат run(), расположенный в конце исходника.
6) У Вас в проге я добавил условие выхода из цикла ввода списка целых чисел - этим условием является ввод цифры ноль. Подправив как надо получаем работающий исходник Вашей проги:
Цитата:
Сообщение от Visual Prolog 7
implement main
open core, console

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

class predicates
readlist: (integer*) procedure (o).
sum1: (integer*,integer,integer,integer,integer) procedure (i,i,o,i,o).
result:().

clauses
classInfo(className, classVersion).

result():-
readlist(L),
sum1(L,0,S1,0,C1),write("Summa1="),write(S1),nl,
write("Count1="),write(C1),nl.

readlist([H|T]):- H=read(),H<>0,!,readlist(T).
readlist([]).

sum1([X|T],S1,S,C1,C):-
S2=S1+X,
C2=C1+1,!,
sum1(T,S2,S,C2,C).
sum1([],S,S,C,C).

run():-
console::init(),
result(),
clearInput(),
_=readchar().
end implement main

goal
mainExe::run(main::run).
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.10.2010, 18:08

7) Обратите внимание на отсутствие объявления списка целых чисел в разделе доменов. Хотя можно было и оставть старое объявление.
8) Далее можно слегка модифицировать исходник сохранив функциональность благодаря возможности использовать функциональный стиль и русский язык:
Цитата:
Сообщение от Visual Prolog 7
implement main
open core, console

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

class predicates
ввод_списка: (integer*) procedure (o).
sum1: (integer*,integer,integer,integer,integer) procedure (i,i,o,i,o).
result:().

clauses
classInfo(className, classVersion).

result():-
ввод_списка(L),
sum1(L,0,S1,0,C1),write("Summa1="),write(S1),nl,
write("Count1="),write(C1),nl.

ввод_списка([H|T]):- H=read(),H<>0,!,ввод_списка(T).
ввод_списка([]).

sum1([X|T],S1,S,C1,C):-!,sum1(T,S1+X,S,C1+1,C).
sum1([],S,S,C,C).

run():-
console::init(),
result(),
clearInput(),
_=readchar().
end implement main

goal
mainExe::run(main::run).
Ответить с цитированием
  (#4 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 27.10.2010, 18:16

Винитарх, огромное спасибо за столь подробный и обстоятельный ответ!
Можно по шагам?

1. Открыла свежескачанный VIP 7.1... Предлагает новый проект создать.
Как создать консольное приложение?
Ответить с цитированием
  (#5 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.10.2010, 18:20

Да я уж вроде по шагам и описал.
А создать просто - пункт меню project -> new. А там уже указать console.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 27.10.2010, 18:28

Огромное спасибо за столь подробный и обстоятельный ответ!

ЗЫ. Хотела повысить вам рейтинг, но, похоже, у вас на форуме не тешатся подобными бирюльками)))

ЗЗЫ. Не сразу выбор консоли заметила...
Ответить с цитированием
  (#7 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 27.10.2010, 19:01

Цитата:
Сообщение от Jenny_ Посмотреть сообщение
Винитарх, огромное спасибо за столь подробный и обстоятельный ответ!
Можно по шагам?

1. Открыла свежескачанный VIP 7.1... Предлагает новый проект создать.
Как создать консольное приложение?
Нуу... свежескачанный должен быть VIP7.3. Значит у Вас не свежескачанный или скачанный из неправильного места (здесь надо брать).
Ответить с цитированием
  (#8 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.10.2010, 19:09

+1
Пишу девушке помощь в VIP7.3, а сам думаю, что у неё в 7.1 может чего и не пойти (имена файлов другие, некоторые домены и PFC-предикаты тоже другие).
Ответить с цитированием
  (#9 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 27.10.2010, 20:56

Не идёт, увы. Говорит, что write не знает

Создаёт вот это, без класса предикатов и run другой.
[PROLOG]implement main
open core

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

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),
succeed(). % place your own code here
end implement main

goal
mainExe::run(main::run).[/PROLOG]
Ответить с цитированием
  (#10 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.10.2010, 23:59

Цитата:
Сообщение от enny_
Создаёт вот это, без класса предикатов
Jenny_, Вы сами ручками должны дописать то, что я Вам здесь показал и удалить то, что не нужно, например, раздел доменов. То, что run другой - не беспокойтесь, пусть будет другой, но его тело должно быть таким, как я написал.
Приведите прогу, которая у Вас не идёт. В той, что Вы привели предиката write() я не наблюдаю.
Ответить с цитированием
  (#11 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 28.10.2010, 00:08

Ясен пень дописывала), и с вашим run'ом и с тем. Щас.
Ответить с цитированием
  (#12 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 28.10.2010, 00:14

Программа у меня незарегистрированная

/************************************************** ***************************

Unregistered

************************************************** ****************************/

implement main
open core

constants
className = "main".
classVersion = "".
class predicates
readlist: (integer*) procedure (o).
sum1: (integer*,integer,integer,integer,integer) procedure (i,i,o,i,o).
result:().

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),result(),
succeed(). % place your own code here
result():-
readlist(L),
sum1(L,0,S1,0,C1),write("Summa1="),write(S1),nl,
write("Count1="),write(C1),nl.

readlist([H|T]):- H=read(),H<>0,!,readlist(T).
readlist([]).

sum1([X|T],S1,S,C1,C):-
S2=S1+X,
C2=C1+1,!,
sum1(T,S2,S,C2,C).
sum1([],S,S,C,C).

end implement main

goal
mainExe::run(main::run).
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 28.10.2010, 00:20

Ошибка у Вас по невнимательности. Я ж открыл класс console, а Вы этого не повторили ни ручками, ни даже просто не скопировали:
open core, console
И почему Вы не завершили цель вот этим, как у меня:
clearInput(),
_=readchar().
Ответить с цитированием
  (#14 (permalink)) Старый
imported_Jenny_ imported_Jenny_ вне форума
Member
 
Аватар для imported_Jenny_
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2010
По умолчанию 28.10.2010, 00:34

Спасибо, компиляция прошла.
Но когда запускаю на выполнение, получаю ошибку, что нет файла
Obj\Visual Prolog.res
Ответить с цитированием
  (#15 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 28.10.2010, 00:40

Ну не знаю. Попробуйте откомпилировать проект заново: Build - ReBuildAll
А вообще-то у Вас запускалась изначальная пустая прога, т.е. та, в которой Вы ещё не вносили изменения?
Ответить с цитированием
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код из turbo prolog в visual prolog posleg Prolog 4 13.06.2011 00:33
Visual Prolog 5.2 yJIaJIa Prolog 1 06.06.2011 15:54
Экспертная система на pdc prolog или visual prolog Anton7 Prolog 8 12.05.2011 13:39
Visual Prolog 7-7.3 Светочка Prolog 9 11.05.2011 15:29
Помогите переделать задачу из Turbo Prolog в Visual Prolog 5 imported_Anneta Prolog 3 23.12.2010 22:59
Visual Prolog 7.3 Sweaterus Prolog 11 14.12.2010 00:16
dll в visual prolog 5.2 kapo Prolog 1 17.06.2010 10:47
Visual Prolog 7.1 jeydron Prolog 4 24.04.2010 23:03
Visual Prolog <--> ISO-Prolog z556 Prolog 33 25.12.2009 09:55
Кто возьмется переписать маленькую программу с 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
Visual Prolog 5 LPproger Prolog 1 06.02.2007 20:12



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