Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 4 / 3
Регистрация: 08.01.2016
Сообщений: 54

Некорректная работа самдельного предиката not, GNU Prolog

21.11.2017, 13:34. Показов 2063. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В GNU Prolog, на сколько я смогла выяснить, штатного предиката not нет, а по определению он должен выглядеть, как
Prolog
1
2
not(X):-call(X),!,fail.
not(X).
Но в базе знаний:
Prolog
1
2
3
4
5
6
7
8
9
10
hungry('Mark').
hungry('Ity').
hungry('Ann').
unslip('Mark').
unslip('Ann').
technicalSkills('Ann').
student(X):-unslip(X),hungry(X).
dracula(X):-unslip(X),hungry(X),not(technicalSkills(X)).
not(X):-call(X),!,fail.
not(X).
При запросе dracula(X). возвращается No, хотя запрос dracula('Mark'). возвращает Yes. Подозреваю, что предикат not блокирует возврат, но слабо себе представляю, что с этим делать. Добавлять в конец предиката dracula fail пробовала, это ничего не дает.
Prolog для меня хобби (данная конкретная программа нужна в качестве иллюстрации для реферата по английскому, но ее можно спокойно чем-нибудь заменить), так что каких-то требований нет, просто так вышло, что мне попался в свое время именно GNU Prolog.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2017, 13:34
Ответы с готовыми решениями:

Swi prolog определение предиката вычисляющего сумму ряда
Просьба оказать помощь в решении данной задачи. Определите предикат p(+N,–S), вычисляющую сумму S = 1*2*3 + 4*5*6 +...+ + (n–2)*(n–1)*n, n...

Как настроить Prolog (GNU/Linux)
Всем привет. Возникла потребность научится языку Prolog, не не знаю как его настроить для удобной работы. В репозиториях дистрибутива...

Увеличить на 1 все элементы списка. GNU Prolog
задание: Определить правило, которое создает новый список, увеличивая на 1 элементы старого списка.. есть код но с ошибкой: ...

4
 Аватар для Case-Man
167 / 107 / 22
Регистрация: 02.01.2012
Сообщений: 596
21.11.2017, 21:12
Code
1
2
3
 ?- \+(1=2).
 
yes
Добавлено через 3 минуты
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| ?- [user].
compiling user for byte code...
hungry('Mark').
hungry('Ity').
hungry('Ann').
unslip('Mark').
unslip('Ann').
technicalSkills('Ann').
student(X):-unslip(X),hungry(X).
dracula(X):-unslip(X),hungry(X),not(technicalSkills(X)).
not(X):-call(X),!,fail.
not(X).
user:10: warning: singleton variables [X] for not/1
 
user compiled, 11 lines read - 1579 bytes written, 14259 ms
 
(1 ms) yes
| ?- dracula(X).
 
X = 'Mark' ?
Добавлено через 1 минуту
Code
1
2
3
4
GNU Prolog 1.4.4 (32 bits)
Compiled Feb 10 2017, 19:52:58 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
0
2 / 4 / 3
Регистрация: 08.01.2016
Сообщений: 54
21.11.2017, 22:53  [ТС]
Цитата Сообщение от Case-Man Посмотреть сообщение
| ?- [user].
К сожалению, данная команда выполняется у меня уже больше получаса, и не похоже, что она вообще когда-нибудь завершит работу. Проблемы с настройками среды выполнения? Или с компьютером? Возможно ли ее как-то обойти?
0
 Аватар для Case-Man
167 / 107 / 22
Регистрация: 02.01.2012
Сообщений: 596
22.11.2017, 10:56
Лучший ответ Сообщение было отмечено Nabra как решение

Решение

Цитата Сообщение от Nabra Посмотреть сообщение
К сожалению, данная команда выполняется у меня уже больше получаса
Прошу прощения, что не выдал нужных пояснений. Заранее невозможно оценить понятность собственного текста.

Первый фрагмент показывает, что вместо not в GNU Prolog вполне успешно применяется \+. Собственно, более компетентные товарищи тут как-то писали, что \+ - он для ANSI-прологов родной, а not - это скорее синтаксический сахар.

Второй фрагмент же показывает, что Ваш код у меня вполне успешно работает. При этом коварная команда [user]., которая ввела Вас в заблуждение - это приказ откомпилировать предикаты не из файла, а из входного потока (завершая Ctrl-D). Там следом идут Ваши предикаты - вот они как раз и откомпилированы. А вот после компиляции я задаю
Code
1
| ?- dracula(X).
и получаю правильный результат
Code
1
X = 'Mark' ?
Поэтому
1) Вы вполне можете больше не возиться с собственным not - есть встроенный аналог
2) Но хотелось бы разобраться, почему Ваш аналог у Вас не заработал..
1
2 / 4 / 3
Регистрация: 08.01.2016
Сообщений: 54
22.11.2017, 23:18  [ТС]
Цитата Сообщение от Case-Man Посмотреть сообщение
GNU Prolog вполне успешно применяется \+
Спасибо, заменила, теперь все выполняется корректно.

Цитата Сообщение от Case-Man Посмотреть сообщение
GNU Prolog 1.4.4 (32 bits)
Compiled Feb 10 2017, 19:52:58 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
У меня это выглядит как
Code
1
2
3
4
GNU Prolog 1.4.4 (32 bits)
Compiled May 15 2013, 12:35:56 with i686-w64-mingw32-gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
Версия, вроде, одна, но разный компилятор... По идее, это не должно влиять на работу программы. В общем, попробую переустановить среду выполнения, но как-нибудь позже. Потом отпишусь, изменится ли ситуация.
Цитата Сообщение от Case-Man Посмотреть сообщение
коварная команда [user].
Я еще удивилась, как она может повлиять в данном случае, но "надо - значит, надо".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2017, 23:18
Помогаю со студенческими работами здесь

Основные предикаты для работы со списками [GNU Prolog]
Сформулируйте основные предикаты для работы со списками - принадлежит_списку - добавлен_в_список - добавлен_в_конец -...

Определить предикат ==. через arg и functor. GNU prolog
Написать указанные предикаты на языке Пролог, проверить определения, вызвав предикаты в интерпретаторе с разными аргументами. ...

Реализовать работу стандартного предиката чтения строки с помощью цикла (Visual Prolog 5.2)
Не поможете, что то не работает. Нужно реализовать работу стандартного предиката чтения строки с помощью цикла. В общем вводим списки, а...

Решение логической задачи на языке Prolog (SWI или GNU)
Здравствуйте, мне нужно решить логическую с использованием Prolog'a, никак не получается решить, помогите, пожалуйста. Заранее благодарен! ...

Матрица с равной суммой чисел. GNU Prolog, в крайнем случае SWI. Устранение ошибки и доведение до работоспособного состояния
Помогите найти ошибки и довести программу до работоспособного состояния. Prolog GNU (нужен именно он) выдает: prog.pl:2:3: syntax...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru