Описание тега prolog

Не используйте этот тег как Пролог и Эпилог. Пролог - наиболее часто используемый язык логического программирования. Он поддерживает недетерминированное программирование посредством хронологического поиска с возвратом и сопоставления с образцом посредством унификации.
1 ответ

Пролог не имеет смысла

Я хотел бы знать, что именно это означает? pred(_):-fail. Я прочитал несколько статей, но не смог найти ничего похожего по синтаксису. РЕДАКТИРОВАТЬ: (более широкий контекст)pred3(A, B) :- pred(A), pred2(B). pred2 такой же как pred
28 фев '15 в 11:52
1 ответ

Общее правило пролога для поиска кузенов и т. д.

Вопрос в том, чтобы написать общее правило, чтобы найти любой уровень относительности! cousin(N,Child1,Child2). Так что это правда, если Child1 и Child2 Nth двоюродные братья. Таким образом, двоюродный брат 1(ребенок 1, ребенок 2) = двоюродный брат …
28 май '15 в 05:12
3 ответа

Добавление целых чисел в список

По какой-то причине это не работает. Я получаю: ОШИБКА: is/2: Аргументы не достаточно созданы 1 add_list([]). 2 add_list([H|T]):- 3 Sum2 is Sum1 + H, 4 add_list(T). Я пытаюсь добавить содержимое списка (содержащего только цифры).
11 окт '11 в 23:42
2 ответа

Пролог найти минимальное значение запроса

Если у меня есть факты в следующем формате: person(name,age). Как я могу написать запрос, чтобы найти самого молодого человека? Я пытался использовать рекурсию, но я продолжал застрять в бесконечных циклах. Так далеко от всего чтения, которое я сдел…
03 май '13 в 00:42
1 ответ

JSON получить пролог предикат

Я пытаюсь создать этот предикат в прологе: Предикат json_get/3 можно определить как: json_get(JSON_obj, Fields, Result). что верно, когда Result можно восстановить, следуя цепочке полей в Fields (список), начиная с JSON_obj, Поле, представленное N (…
08 янв '18 в 15:46
1 ответ

Как этот предикат Пролога может стать быстрее, чем экспоненциальный?

У меня есть предикат, который проверит, доступна ли комната в рамках данного расписания (состоящего из событий). Проверка, доступна ли комната и не занята ли другим событием, в настоящее время работает экспоненциально. Я хотел бы оптимизировать это.…
04 дек '15 в 20:26
1 ответ

Как проверить, получает ли список другой список в Прологе

Я хотел бы создать аргумент, который успешно выполняется, когда список переходит к другому списку. Например?-Proceed_list([1,2],[2]). Да или Истина (независимо от компилятора). Может кто-нибудь мне помочь?
13 янв '12 в 08:41
3 ответа

Пролог: сопоставление одной или нескольких анонимных переменных

[_, [ X, _ ],_] будет соответствовать списку, подобному [d, [X, a], s]. Есть ли способ сопоставить его с любым шаблоном, где есть одна или несколько анонимных переменных? то есть. [[X, a], s] и [[d,a],[p,z], [X,b]] будут совпадать? Я пытаюсь написат…
19 мар '12 в 22:18
4 ответа

Указатели поиска пути Пролог

Мне нужно проверить, является ли путь действительным, истинным или ложным. Это дано так: ?-path(a,b,[(a,c),(c,d),(d,b)]). true В части списка, как я могу получить доступ к a или c в (a,c)? Это как строка "(a,c)"? И вообще, как можно решить этот тип …
03 ноя '09 в 17:40
2 ответа

3 последовательных элемента в Прологе с использованием concat

Поэтому я работаю над этой проблемой, чтобы иметь 3 элемента X, которые должны быть последовательными в списке и использовать только concat. Вот что я пытался: threeConsecutive(X, L):- concat(X, X, L2), concat(L2, X, L). Это правильно? Если нет, не …
24 мар '16 в 05:03
2 ответа

Пролог: проверьте, имеют ли два списка одинаковые элементы

Я новичок в Прологе, и у меня возникают проблемы с проверкой, если два списка имеют абсолютно одинаковые элементы. Элементы могут быть в разных порядках. У меня есть этот код: myremove(X, [X|T], T). myremove(X, [H|T], [H|R]) :- myremove(X, T, R). sa…
28 окт '12 в 18:13
2 ответа

Пролог GNU - оператор Univ? Объяснение этого

Итак, унив оператор. Я не совсем понимаю это. Например это: foo(PredList,[H|_]) :- bar(PredList,H). foo(PredList,[_|T]) :- foo(PredList,T),!. bar([H|_],Item) :- G =.. [H,Item],G. bar([_|T],Item) :- bar(T,Item). Что это делает? Это выглядит, чтобы ув…
1 ответ

Сплющить в прологе - как то еще

Посмотрите на мою реализацию flatten: в общем, это работает. Единственная проблема для my_flatten([], F) - это дает F=[]; F=[[]] вместо F=[], my_flatten(L, X) :- my_flatten(L, X, []). %, reverse(F, X). my_flatten([], Acc, Acc). my_flatten([H|T], F, …
18 май '16 в 16:10
1 ответ

Пролог: создание вселенной Herbrand и базы Herbrand

У меня есть серьезные проблемы с пониманием концепции Пролога и соответствующей вселенной Гербранда, базы Гербранда и так далее. Например, если у меня есть программа Prolog: p(X,Y) :- q(X,Y), q(Y,X). s(a). s(b). s(c). q(a,b). q(b,a). q(a,c). Я имею …
07 ноя '15 в 22:05
1 ответ

Пролог: деление числа

Я хотел сделать предикат, который возвращает список делителей числа. Пример: 72 = 2*2*2*3*3. prdel(A,[],_):- A is 1. prdel(P,[D|L],D):- 0 is mod(P,D), P1 is P/D, prdel(P1,L,D). prdel(P,L,D):- D1 is D+1, prdel(P,L,D1). Это работает и возвращает прави…
20 ноя '14 в 18:44
2 ответа

Неопределенная процедура DWIM не может исправить цель в Прологе

Я действительно новичок в прологе и пробую несколько примеров. Я получаю ошибку ERROR: Undefined procedure: eats/2 (DWIM could not correct goal) когда я запускаю правило. Почему это показывает, если мое правило верно? Пожалуйста, смотрите правило ни…
12 авг '18 в 18:27
3 ответа

Определенная логическая программа

Цель состоит в том, чтобы реализовать предикат noDupl/2, Первым аргументом этого предиката является список для анализа, а вторым аргументом является список чисел, которые не являются дубликатами. Я не мог понять код ниже, и когда я скомпилировал его…
12 июл '15 в 13:17
1 ответ

"Если == ноль" эквивалент в Прологе

Я хочу смоделировать базу знаний, где я могу утверждать расходы на различные интернет-магазины как факты. Одно правило теперь должно быть в состоянии рассчитать сумму этих расходов. Подсказка в том, что у меня есть разные скидки на магазины. Мои фак…
13 ноя '18 в 19:02
1 ответ

treeMerge в swi-прологе

Я пытаюсь построить предикат treeMerge(A,B,C), который возвращает true, если C является результатом слияния двух деревьев A и B. Есть предложения о том, как я могу это реализовать? У меня есть грубая идея, я думаю о слиянии корня, потом первого пото…
04 дек '17 в 02:11
2 ответа

Пролог запрос, который проверяет список

Я довольно плохо знаком с прологом и, изучая его, наткнулся на проблему, которая у меня возникла. У меня есть несколько фактов в базе данных. Они есть: book(year(1937), title([of,mice,and,men]), rating_out_of_ten(9)). book(year(2008), title([the,hun…
24 мар '17 в 23:05