Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Visual Prolog для чайников

15.02.2014, 20:59. Показов 8595. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Просьба не обращать внимание на кол-во сообщений: в прологе я дуб дубом.

Пытаюсь сделать первые лабы по этому предмету, но не особо получается, т.к. примеры в методе написаны на трубе, а сделать нужно в вижуале. Собственно, о чем речь.

Собственно пытаюсь сам как-то освоить его, но возникла проблема, с котороый не смог справится. Для начала я пытаюсь написать простейшую программу, которая выводит значение общезначимого предиката на экран. Пишу в таком виде:
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
implement main
    open core
 
domains
    ch = char.
 
class predicates
    mother : (string).
 
clauses
 
    mother(_).
 
    run():-
        console::init(),
        mother("me"),
 
        stdIO::writef("%",  1),
 
        ch = stdIO::readChar(),
        succeed().
end implement main
 
goal
   mainExe::run(main::run).
(насколько я понял, class predicates - это что-то вроде static модификатора, то есть можно использовать их без создания объекта этого класса).

но он пишет undeclared 'ch' (чтобы консолька не закрывалась)

И как мне вывести значение предиката, как-то так? readChar : () -> char Char.

И напоследок, вопрос: как можно задавать рекурсивные предикаты ? Также, как и обычные? Например, для множества целых чисел:

Prolog
1
2
IsNatural(0).
IsNatural(N) :- IsNatural(N - 1).
please, advice

Добавлено через 16 минут
Версия среды 7.4
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2014, 20:59
Ответы с готовыми решениями:

Visual Prolog для чайников ч.2
Быстро назрели вопросы для второй части. Первый заключается в том, как работать с предикатом NOT? Пробовал гуглить, но слово слишком...

Начало работы Prolog для чайников.
Всем доброго времени суток. Не подскажете что может быть? Создаю новый консольный проект в visual prolog. В документ main пишу код ...

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

6
15.02.2014, 21:13

Не по теме:

дался тебе этот Visual Prolog...ставь SWI-Prolog

Цитата Сообщение от Psilon Посмотреть сообщение
(насколько я понял, class predicates - это что-то вроде static модификатора
Prolog это декларативный язык, не пытайся проводить аналогии с императивными языками

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.02.2014, 03:30  [ТС]
дался тебе этот Visual Prolog...ставь SWI-Prolog
увы, препод требует именно ViP.
Prolog это декларативный язык, не пытайся проводить аналогии с императивными языками
тогда почему при убирании модификатора class он выдает ошибку error c295 : The class does not produce objects, therefore it cannot contain object facts and predicates: 'main::mother/1', которую я идентифицирую, как "класс, объекты которого не создаются не может иметь полей (предикатов)", то есть я из статического предиката получаю предикат объекта, которых у меня нет, и ему это не нравится.

Чтение из консольки я решил с помощью _ = stdIO::readChar() , но в остальном засада... Это не ответ на вопрос, почему я не могу создать свои переменные.

Добавлено через 6 часов 13 минут
В общем вопрос сводится к: как мне вывести результат выполнения какой-нибудь функции на экран? Например, мне нужно посчитать y = x2 для произвольного числа. То есть мне нужен аналог подобной программы на прологе:
C
1
2
3
4
5
6
7
8
9
10
double F(double x)
{
   return x*x;
}
 
int main()
{
   printf("%d", F(2));
   return 0;
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.02.2014, 13:59
Prolog
1
2
square(X, Y) :-
    Y is X * X.
console
2 ?- square(5, X).
X = 25.
1
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
16.02.2014, 17:49
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Аналог на VP7.4
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
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
class predicates
   f : (real,real) procedure(i,o).
 
clauses
    classInfo(className, classVersion).
    f(X, Y) :-
        Y=X*X.
 
clauses
    run():-
        console::init(),
        stdio::write("X = "),
        X = stdio::readLine(),
        hasDomain(real,RX),
        RX=toTerm(X),
        f(RX,Y),
        stdio::write("Y = ", Y),
        programControl::sleep(1000),
        succeed().
end implement main
 
goal
    mainExe::run(main::run).
P.S. Думаю, ответы на Ваши вопросы по структуре программы найдутся в туториале на офиц. сайте Пролога
3
Заблокирован
24.02.2014, 20:40
Я Вас умоляю, keidin, не владеете языком - не пишите на нём медвежьи подсказки. Ими Вы позорите себя и вводите в заблуждение людей, изучающих язык Visual Prolog.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
implement main
    open core, console, programControl
 
class predicates
   f : (real) -> real.
 
clauses
    f(X) =X*X.
 
    run():-init(),
        write("X = "),
        X = read(),
        write("Y = ", f(X)),
        sleep(1000).
end implement main
 
goal
    mainExe::run(main::run).
Эту прогу можно сократить на несколько строк, но это будет уже в ущерб пониманию новичков.
1
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
24.02.2014, 21:44
Благодарю за конструктивную критику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2014, 21:44
Помогаю со студенческими работами здесь

Адаптировать для visual prolog 7.5
Здравствуйте! Под конец магистратуры меня решили обременить прологом. Вроде нашел кучу полезных программ, но выяснилось, что не все так...

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

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

Перевести код из turbo prolog в visual prolog
не подскажите плиз как будет выглядеть код turbo prolog в Visual Prologe 7.3 turbo prolog: predicates for(integer,integer) ...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru