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

NoneDif/2 - это встроенный в Пролог предикат, который выражает синтаксическое неравенство в звуковой форме.
2 ответа

Простой Пролог удалить из списка

(Это не вопрос курсовой работы. Просто мое личное обучение.) Я пытаюсь выполнить упражнение в Прологе, чтобы удалить элементы из списка. Вот мой код: deleteall([],X,[]). deleteall([H|T],X,Result) :- H==X, deleteall(T,X,Result). deleteall([H|T],X,[H|…
22 июн '11 в 14:25
1 ответ

Как выразить предикат allDifferent/6?

Позволять allDifferent(A, B, C, D, E, F) быть истинным тогда и только тогда, когда ∀i, j в {1, 2, 3, 4, 5, 6}, i-й и j-й аргументы объединяются тогда и только тогда, когда i = j. таким образом allDifferent(3, 1, 4, 1, 5, 9) ложно, но allDifferent(3,…
25 фев '17 в 14:38
1 ответ

Два разных пути от X до Y в графе

Я застрял со следующим вопросом Пролога: заданы ребра графа без циклов как факты. например: edge(a, b). edge(b, c). edge(c, d). edge(c, e). ... Я должен написать предикат, который проверяет, есть ли два разных пути между вершинами X и Y. Например, в…
22 янв '17 в 22:31
8 ответов

Другой /2 - существует ли чистое детерминированное определение?

different(Xs, Ys) :- member(X, Xs), non_member(X, Ys). different(Xs, Ys) :- member(Y, Ys), non_member(Y, Xs). Хотя это определение с использованием member/2 а также non_member/2 почти 1 идеален с декларативной точки зрения, он создает избыточные реш…
16 июн '15 в 09:32
3 ответа

Пролог - проверка количества случаев не работает должным образом

В Прологе: у меня есть следующая функция, которая подсчитывает вхождения определенного элемента в списке: %count(L:list,E:int,N:int) (i,i,o) count([],_,0). count([H|T],E,C):-H == E,count(T,E,C1),C is C1+1. count([_|T],E,C):-count(T,E,C). Я проверил …
19 ноя '15 в 12:49
3 ответа

Разделить список до точки в прологе

my_list([this,is,a,dog,.,are,tigers,wild,animals,?,the,boy,eats,mango,.]). Предположим, это список в прологе, который я хочу разделить на три части, то есть до трех полных остановок, и сохранить их в переменных. Как мне это сделать... counthowmany(_…
26 фев '14 в 03:11
2 ответа

Почему Пролог падает в этом простом примере?

likes(tom,jerry). likes(mary,john). likes(mary,mary). likes(tom,mouse). likes(jerry,jerry). likes(jerry,cheese). likes(mary,fruit). likes(john,book). likes(mary,book). likes(tom,john). likes(john,X):-likes(X,john), X\=john. Привет, выше приведен оче…
28 апр '12 в 03:06
2 ответа

Как предотвратить дублирование в сгенерированных последовательностях с помощью dif/2?

Этот вопрос возник при ответе на другой вопрос о Stackru при (обобщении), генерирующий все последовательности, сформированные из конечного набора элементов без повторяющихся вхождений. Как правильно заметил Борис в комментариях, существует множество…
06 дек '14 в 19:11
2 ответа

Удаление всех членов списка без объединения в прологе

Возможный дубликат: Пролог удалить: не удаляет все элементы, которые объединяются с элементом В Прологе, если вы напишите это: delete([(1,1),(1,2),(1,1),(3,4)],(1,_),L). результат будет: L = [ (1, 2), (3, 4)]. Что является нормальным, потому что пер…
11 ноя '11 в 22:18
5 ответов

Каковы предикаты сбоя в Прологе?

Я не могу придумать ситуацию, когда мне это нужно.
08 июн '10 в 22:35
1 ответ

Почему эта пролог-программа не компилируется?

У меня есть программа пролога. Эти строки мешают его компиляции: wins(A,B,C,D) :- convert(A,W), value(W,P), convert(B,X), value(X,Q), convert(C, Y), value(Y,R), convert(D,Z), value(Z,S), card(A), card(B), card(C), card(D), (P+Q)>(R+S), (P+Q)<2…
31 мар '11 в 19:57
2 ответа

Пролог Сравнить элементы списка

Когда дан некоторый список ввода, я хочу создать новый список, и он должен: Всегда добавляйте h перед новым списком Сравните каждые два последовательных элемента списка ввода и, если они равны, добавьте y к новому списку, если нет, добавьте x. Приме…
22 май '16 в 13:43
3 ответа

Охранные пункты в прологе?

Они существуют? Как они реализованы? Сопутствующие предикаты SWI-Пролог (freeze, when, dif и т. д.) имеют функциональность охранников. Как они вписываются в предпочтительный стиль программирования Prolog? Я очень плохо знаком с логическим программир…
3 ответа

Пролог: проверка на наличие дубликатов в списке

Написать предикат allDistinct/1 чей параметр является списком (символов) и который успешно выполняется, если все символы в списке различны. notin(A,[]). notin(A,[B|C]) :- A\=B, notin(A,C). allDistinct([]). allDistinct([_]). allDistinct([A|B]) :- not…
08 мар '16 в 19:37
2 ответа

Пролог: оператор неравенства

Я использую SICStus Prolog и имею ряд фактов: student('John Henry', 'Maths'). student('Jim Henry', 'Maths'). student('John Alan', 'Maths'). student('Alan Smith', 'Computing'). student('Gary Henry', 'Maths'). Я хочу получить общий предмет для двух уч…
15 ноя '13 в 20:42
8 ответов

Как определить (и назвать) соответствующие предикаты сравнения безопасных терминов в ISO Prolog?

Стандартный порядок терминов (ISO/IEC 13211-1 7.2 Порядок терминов) определяется для всех терминов, включая переменные. Хотя для этого есть хорошее применение - подумайте о реализации setof/3, это делает многие иначе понятные и логичные использовани…
03 ноя '14 в 18:33
3 ответа

Странные результаты для манипулирования списком

Я пытаюсь реализовать некоторые предикаты для манипулирования списками в Прологе. Все работает как хотелось. Например append([],Ys,Ys). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). Пример запроса: ?- append([1,2,3],[4,5,6],X). X = [1,2,3,4,5,6]. % …
25 окт '14 в 08:44
6 ответов

Удалить ведущие нули в списке в Прологе

У меня есть список с неизвестным числом нулей в начале, например [0, 0, 0, 1, 2, 0, 3]. Мне нужно, чтобы этот список был очищен от ведущих нулей, чтобы он выглядел как [1, 2, 0, 3]. Вот что у меня есть: lead([Head | _], _) :- Head =\= 0. lead([0 | T…
30 сен '16 в 19:50
1 ответ

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

Мне было трудно сформулировать название для этого вопроса, поэтому я постараюсь объяснить свою проблему как можно лучше здесь. В Прологе вы можете использовать оператор _ в предикате для получения всех определений, независимо от того, что там сущест…
26 фев '15 в 19:57
2 ответа

Почему мы используем '!' в прологе

Это код, который я пытаюсь понять. co(X) :- co(X,[],L). co([],A,A):- write(A). co([X|Xs], A, L) :- p(X-Z,A,R), !, Z1 is Z+1, co(Xs, [X-Z1|R], L). co([X|Xs], A, L) :- co(Xs, [X-1|A], L). p(X-Y,[X-Y|R],R):- !. p(X,[H|Y], [H|Z]) :- p(X,Y,Z). Какая поль…
14 ноя '14 в 10:15