Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 20

Перенос кода из prolog 5.2 в prolog 7.3 и выше

27.02.2018, 20:25. Показов 1922. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
можете пожалуйста переделать код из prolog 5.2 в prolog 7.3
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
GLOBAL FACTS - db1
 strings_db1(string,integer)
 GLOBAL FACTS - db2
 strings_db2(string,integer)
GLOBAL DOMAINS
stringlist=string*
file=file_inout
PREDICATES
consonant(char) % Согласная
nondeterm create_db1(stringlist) %Запись фактов в DB1
create_db2 % Запись фактов в DB2
nondeterm countCh(string,integer,integer) %Подсчет согласных в слове
 run 
create_rezult % Создание фактов с результатами вычислений
CLAUSES
consonant('b').consonant('c').consonant('d').consonant('f'). consonant('g').consonant('h').
consonant('j').consonant('k').consonant('l').consonant('m').consonant('n').consonant('p').
consonant('q').consonant('r').consonant('s').consonant('t').consonant('v').consonant('w').
consonant('x').consonant('z').
 run:-   %write("Имя файла с исходными строками ? "),       
          %readln(FileIn), 
   openread(file_inout,:\\text.txt"), readdevice(file_inout),
   create_db1(List),
   readdevice(keyboard), closefile(file_inout),   
   save(:\\text_1.txt",db1),  
   create_db2, save("c:\\text_2.txt",db2), 
   openwrite(file_inout,"c:\\text_1.txt"),   
   writedevice(file_inout), 
   create_rezult,
    writedevice(screen), closefile(file_inout).
 %Создание DB1
 create_db1([X|List]):- not(eof(file_inout)),readln(X),  
  assertz(strings_db1(X,0), db1), create_db1(List).
    create_db1([]).
  %Создание DB2   
  create_db2:-  retract(strings_db1(X,N),db1), 
     countCh(X,N,M), !, 
     assertz(strings_db2(X,M),db2),   fail.
  create_db2.
    %Подсчет согласных в слове; М - выходной параметр 
  countCh("", N, M):-M=N,!.
  countCh(X,N,M) :-frontchar(X,Ch,T), consonant(Ch), N1=N+1, countCh(T,N1,M).
  countCh(X,N,M) :-frontchar(X,Ch,T),  countCh(T,N,M).
 % Создание выходного файла
create_rezult:- retract(strings_db2(X,N),db2), write(X), write(" "),write(N), nl, fail.
create_rezult.
GOAL
run.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2018, 20:25
Ответы с готовыми решениями:

Изменение кода из турбо prolog, в обычный prolog
DOMAINS s = string ss = string* i = integer is = integer* DATABASE fact(s,s,i,i) PREDICATES ...

Перенос программы с Visual Prolog 7.1 в Visual Prolog 7.5
Проблема переноса. Взяла пример с книги Visual Prolog 7.1 для начинающих. Это игра червь. Вроде всё, что не компилировалось я исправила, но...

Из Turbo Prolog в Visual Prolog - где будут отличия в коде?
ребята ,помогите. есть прога на турбо прологе,а нужно отредактировать под visual prolog 7.5. Что изменится? Где отличия?.. ниже...

4
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
27.02.2018, 21:01
Поработайте для начала руками - создайте проект в семерке, там много всякой обвязки
goal не трогайте, а остальное перетащите внутрь класса
Поменяйте объявление предикатов с вида
Prolog
1
nondeterm create_db1(stringlist)
на
Prolog
1
create_db1: (stringlist) nondeterm.
Вместо PREDICATES напишите CLASS PREDICATES
Выложите код и список ошибок
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 20
27.02.2018, 21:23  [ТС]
пока две синтаксические ошибки, на GLOBAL FACTS и nondeterm countCh(string,integer,integer)
но если сделаю так countChstring,integer,integer) nondeterm. все равно там же остается синтаксическая ошибка
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
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
clauses
    classInfo(className, classVersion).
 
GLOBAL FACTS - db1
 strings_db1(string,integer)
 GLOBAL FACTS - db2
 strings_db2(string,integer)
GLOBAL DOMAINS
stringlist=string*
file=file_inout
class predicates
consonant:(char). % Согласная
create_db1: (stringlist) nondeterm. %Запись фактов в DB1
create_db2 % Запись фактов в DB2
nondeterm countCh(string,integer,integer) %Подсчет согласных в слове
 run 
create_rezult % Создание фактов с результатами вычислений
CLAUSES
consonant('b').consonant('c').consonant('d').consonant('f'). consonant('g').consonant('h').
consonant('j').consonant('k').consonant('l').consonant('m').consonant('n').consonant('p').
consonant('q').consonant('r').consonant('s').consonant('t').consonant('v').consonant('w').
consonant('x').consonant('z').
 run:-   %write("Имя файла с исходными строками ? "),       
          %readln(FileIn), 
   openread(file_inout,:\\text.txt"), readdevice(file_inout),
   create_db1(List),
   readdevice(keyboard), closefile(file_inout),   
   save(:\\text_1.txt",db1),  
   create_db2, save("c:\\text_2.txt",db2), 
   openwrite(file_inout,"c:\\text_1.txt"),   
   writedevice(file_inout), 
   create_rezult,
    writedevice(screen), closefile(file_inout).
 %Создание DB1
 create_db1([X|List]):- not(eof(file_inout)),readln(X),  
  assertz(strings_db1(X,0), db1), create_db1(List).
    create_db1([]).
  %Создание DB2   
  create_db2:-  retract(strings_db1(X,N),db1), 
     countCh(X,N,M), !, 
     assertz(strings_db2(X,M),db2),   fail.
  create_db2.
    %Подсчет согласных в слове; М - выходной параметр 
  countCh("", N, M):-M=N,!.
  countCh(X,N,M) :-frontchar(X,Ch,T), consonant(Ch), N1=N+1, countCh(T,N1,M).
  countCh(X,N,M) :-frontchar(X,Ch,T),  countCh(T,N,M).
 % Создание выходного файла
create_rezult:- retract(strings_db2(X,N),db2), write(X), write(" "),write(N), nl, fail.
create_rezult.
 
 
end implement main
 
goal
    mainExe::run(main::run).
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
28.02.2018, 07:41
Ночью посмотрю, сейчас не за компом

Добавлено через 8 часов 16 минут
Не успел, там чтение файла, его переписывать надо
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
04.03.2018, 05:09
Лучший ответ Сообщение было отмечено greg00 как решение

Решение

Наконец у меня дошли руки до Вашей задачи.
Признаться, логика довольно странная, привлечение базы непонятно, созданный список нигде не используется..
Но переписал практически дословно:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
% Black Fregat
 
implement main
    open core
 
class facts - db1
    strings_db1 : (string, integer).
 
class facts - db2
    strings_db2 : (string, integer).
 
class predicates
    % Согласная
    consonant : (char) determ.
 
    %Запись фактов в DB1
    create_db1 : (string* [out], inputStream) multi.
 
    % Запись фактов в DB2
    create_db2 : ().
 
    %Подсчет согласных в слове
    countCh : (string, integer, integer[out]) determ.
 
    % Создание фактов с результатами вычислений
    create_rezult : (outputStream).
 
clauses
    consonant('b'). consonant('c'). consonant('d'). consonant('f').  consonant('g'). consonant('h').
    consonant('j'). consonant('k'). consonant('l'). consonant('m'). consonant('n'). consonant('p').
    consonant('q'). consonant('r'). consonant('s'). consonant('t'). consonant('v'). consonant('w').
    consonant('x'). consonant('z').
 
    run() :-
        InFile = inputStream_file::openFileUtf8("E:\\Work\\ViP\\text.txt"),
        create_db1(_List, InFile),
        InFile:close(),
        file::save("E:\\Work\\ViP\\text_1.txt", db1),
 
        create_db2(),
        file::save("E:\\Work\\ViP\\text_2.txt",db2),
        OutFile = outputStream_file::createUtf8("E:\\Work\\ViP\\text_3.txt"),
        create_rezult(OutFile),
        OutFile:close(),
        console::write("Done"),
        _ = console::readLine(),
        !.
 
    %Создание DB1
    create_db1([X|List], InFile) :-
        not(InFile:endOfStream()),
        !,
        X = InFile:readLine(),
        assertz(strings_db1(X, 0)),
        create_db1(List, InFile).
    create_db1([], _).
 
    %Создание DB2
    create_db2() :-
        retract(strings_db1(X, N)),
        countCh(X, N, M),
        assertz(strings_db2(X, M)),
        fail.
    create_db2().
 
    %Подсчет согласных в слове; М - выходной параметр
    countCh("", N, M) :-
        M = N,
        !.
    countCh(X, N, M) :-
        string::frontchar(X, Ch, T),
        consonant(Ch),
        !,
        countCh(T, N+1, M).
    countCh(X, N, M) :-
        string::frontchar(X, _Ch, T),
        countCh(T, N, M).
 
    % Создание выходного файла
    create_rezult(OutFile) :-
        retract(strings_db2(X, N)),
        OutFile:write(X, " ", N), OutFile:nl,
        fail.
    create_rezult(_).
 
end implement main
 
goal
    mainExe::run(main::run).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2018, 05:09
Помогаю со студенческими работами здесь

Пожалуйста, помоите переделать программу с Turbo Prolog на Visual Prolog
DOMAINS l_i=integer* l_s=string* i=integer s=string c=char structura=str(i,s) %Структура Порода-Параметры и его список ...

Как переделать программу написанную на Turbo-Prolog в SWI-Prolog?
Ребята подскажите пожалуйста как переделать эту программу написанную на Turbo-Prolog в SWI-Prolog? domains i=integer il=i* ...

В Turbo-Prolog есть возможность описать Goal. Как это реализовано в SWI-Prolog
Здравствуйте. в Turbo-Prolog есть возможность описать Goal: Goal father(X,_), write(X). И ответ мы получим сразу при запуске...

Поездная бригада состоит из кондуктора, проводника, машиниста и помощника машиниста
Может у кого есть исходни на Prolog ЗЫ заранее спаисбо)

Код Turbo Prolog переделать в Visual Prolog 5.2
Помогите пожалуйста переделать код Turbo Prolog в Visual Prolog 5.2 domains st=st(string,real,real,real,real) st1=st1(string,real) ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru