Форум программистов, компьютерный форум CyberForum.ru

Работа с пролог кодом из среды С++ - C++

Восстановить пароль Регистрация
 
Infernotiv
0 / 0 / 1
Регистрация: 08.03.2014
Сообщений: 8
25.05.2014, 00:52     Работа с пролог кодом из среды С++ #1
Добрый вечер.

Мне дали задание в университете реализовать работу с Prolog кодом из среды С++. И есть инструкция как с помощью Swi-Prolog и Microsoft Visual Studio это сделать, но у меня все равно ничего не выходит

Чего я добился:

1. Это написал автомат на языке пролог:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
'переход'('закрыты','оА','А открыт').
'переход'('А открыт','зА','закрыты').
'переход'('закрыты','оВ','В открыт').
'переход'('В открыт','зВ','закрыты').
'переход'('А открыт','оВ','открыты').
'переход'('открыты','зВ','А открыт').
'переход'('В открыт','оА','открыты').
'переход'('открыты','зА','В открыт').
'начальное'('закрыты').
'допустимо'(State1,[C],State2) :- 'переход'(State1,C,State2).
'допустимо'(State1,[C|Chars],State2) :- 'переход'(State1,C,St11), 'допустимо'(St11,Chars,State2).
'допустимо'(Chain) :- 'начальное'(S1), 'допустимо'(S1,Chain,_).
2. Пытаюсь работать с этой программой из Microsoft Visual Studio, и тут у меня уже большие проблемы...

C++
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
#include "stdafx.h"
#include "stdio.h"
#include "swi-cpp.h"
#include "stdlib.h"
 
#include <iostream> 
using namespace std; 
 
int main()
{
    try{
        PlEngine prolog(argv[0]);
        // пример вопроса без переменных:
        if (PlCall("'допустимо'(['оA','оB','зA','зB'])") == TRUE)
            cout << "[оA,оB,зA,зB] допустимо";
        else
            cout << "[оA,оB,зA,зB] недопустимо";
        // пример вопроса с переменными: 'переход'('закрыты',A,B)
        PlTermv result(2);
        result[0]="'закрыты'";
        if (PlCall("'переход'",result) == TRUE)
            cout << "закрыты - " << (char)result[1] << " - " (char)result[2];
        else
            cout << "закрыты - нет переходов"; 
        }
    catch (PlException& E) {cerr << (char)E;}
}
Выполнял я все по инструкциям, подключил libpl.dll к проекту (добавив libpl.dll и libpl.lib в папку debug, а swi-cpp.h и swi-prolog.h в папку проекта, также в меню Проект - Свойства - Компановщик - Ввод - Дополнительные зависимости добавил путь к .lib файлу). Не знаю все ли я правильно сделал, но в интернете прочитал что нужно подключать так.

В итоге при компиляции моего проекта на С++ выходит 28 ошибок...

C++
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
1>------ Построение начато: проект: swiProlog, Конфигурация: Debug Win32 ------
1>Построение начато 25.05.2014 0:17:54.
1>InitializeBuildStatus:
1>  Обращение к "Debug\swiProlog.unsuccessfulbuild".
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  swiProlog.cpp
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(3): warning C4627: #include "swi-cpp.h": пропущен при поиске использования предкомпилированного заголовка
1>          Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(13): error C2065: PlEngine: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(13): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "prolog"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(13): error C2065: argv: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(13): error C3861: prolog: идентификатор не найден
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(15): error C2065: TRUE: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(15): error C3861: PlCall: идентификатор не найден
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(20): error C2065: PlTermv: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(20): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "result"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(20): error C3861: result: идентификатор не найден
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(21): error C2065: result: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(22): error C2065: result: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(22): error C2065: TRUE: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(22): error C3861: PlCall: идентификатор не найден
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(23): error C2065: result: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(23): error C2144: синтаксическая ошибка: перед "char" требуется ")"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(23): error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(23): error C2059: синтаксическая ошибка: )
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(27): error C2061: синтаксическая ошибка: идентификатор "PlException"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(27): error C2310: в блоках catch должен быть указан один тип
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(27): error C2065: E: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(28): error C2317: для блока try, начинающегося в строке 12, нет соответствующих блоков catch
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.07
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Как вообще правильно можно запустить программу на Prolog'е в С++ ? И объясните пожалуйста где мои ошибки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 00:52     Работа с пролог кодом из среды С++
Посмотрите здесь:

C++ Переменные среды Windows
Выбор среды разработки C++
разбор среды C++
C++ Выбор среды программирования
С++ и среды разработки приложений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
25.05.2014, 02:22     Работа с пролог кодом из среды С++ #2
По какой-то причине компилятор пропустил swi-cpp.h в поисках "precompiled headers". Попробуйте вместо первой строки добавить:
C++
1
#include <StdAfx.h>
Infernotiv
0 / 0 / 1
Регистрация: 08.03.2014
Сообщений: 8
25.05.2014, 10:14  [ТС]     Работа с пролог кодом из среды С++ #3
schdub, теперь #include подчеркнут(не удается открыть источник файл "StdAfx"), но ошибок стало поменьше

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1>------ Построение начато: проект: swiProlog, Конфигурация: Debug Win32 ------
1>Построение начато 25.05.2014 10:11:44.
1>InitializeBuildStatus:
1>  Обращение к "Debug\swiProlog.unsuccessfulbuild".
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  swiProlog.cpp
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swi-cpp.h(851): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files\microsoft visual studio 10.0\vc\include\string.h(105): см. объявление "strcpy"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(15): error C2065: argv: необъявленный идентификатор
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(25): error C2440: приведение типов: невозможно преобразовать "PlTerm" в "char"
1>          Неоднозначное пользовательское преобразование
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(25): error C2144: синтаксическая ошибка: перед "char" требуется ")"
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(25): error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(25): error C2059: синтаксическая ошибка: )
1>c:\users\макс\documents\visual studio 2010\projects\swiprolog\swiprolog\swiprolog.cpp(29): error C2440: приведение типов: невозможно преобразовать "PlException" в "char"
1>          Неоднозначное пользовательское преобразование
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.66
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
25.05.2014, 14:34     Работа с пролог кодом из среды С++ #4
Infernotiv, а какаой код ошибки? Не вижу ошибки связанной с StdAfx.h в build log. Выложите весь проект. Скорее всего как-то криво создали проект.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
26.05.2014, 02:31     Работа с пролог кодом из среды С++ #5
Вот пересоздал проект, исправил ошибки (не обратил внимание на ошибки в коде, когда отвечал первый раз, полагал, что при таком-то уж задании человек должен знать С/С++, ан нет) и скопилировал удачно, но не смог запустить, т.к. у меня нет pthreadVC.dll. Так и не смог понять зачем в проекте исходники пустой DLL libpl.
Вложения
Тип файла: zip swiProlog2.zip (258.4 Кб, 6 просмотров)
Infernotiv
0 / 0 / 1
Регистрация: 08.03.2014
Сообщений: 8
26.05.2014, 09:42  [ТС]     Работа с пролог кодом из среды С++ #6
schdub, спасибо. но у меня тоже нет pthreadVC.dll. установить тоже не получается, что делать?
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
26.05.2014, 12:44     Работа с пролог кодом из среды С++ #7
Infernotiv, где вы взяли libpl.dll? вместе с ней должна быть и pthreadVC.dll
По идее, swi prolog нужно собирать из исходников.
Infernotiv
0 / 0 / 1
Регистрация: 08.03.2014
Сообщений: 8
26.05.2014, 16:41  [ТС]     Работа с пролог кодом из среды С++ #8
schdub, понял. нашел эту pthreadVC.dll, подключил.
Теперь выскакивает после компиляции окно с сообщением "Необработанное исключение в "0x10006b69" в "swiProlog2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x000000e0". "
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 01:47     Работа с пролог кодом из среды С++
Еще ссылки по теме:

C++ Настройка среды
работа с двоичным кодом C++
C++ Портабельные среды разработки

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

Или воспользуйтесь поиском по форуму:
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
27.05.2014, 01:47     Работа с пролог кодом из среды С++ #9
Infernotiv, запускайте отладчик и разбирайтесь где и что упало.
Yandex
Объявления
27.05.2014, 01:47     Работа с пролог кодом из среды С++
Ответ Создать тему
Опции темы

Текущее время: 01:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru