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

Сопрограммы в Прологе позволяют динамически изменять порядок выполнения целей.
1 ответ

SWI-Пролог: Как использовать мой собственный предикат в качестве условия в когда /2

Я пытаюсь реализовать программу Prolog, которая может взаимодействовать с Java. Для этого я использую JPL в качестве интерфейса Prolog/Java. Я ищу механизм, который позволяет мне выполнять действия автоматически, когда условия становятся реальностью…
08 дек '18 в 16:14
3 ответа

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

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

Логическое отрицание в прологе

Я прочитал довольно много о Отрицании Пролога Отказом, где Пролог, чтобы доказать это \+Goal держит пытается доказать, что Goal выходит из строя. Это тесно связано с CWA (предположение о близком мире), где, например, если мы запрашиваем \+P(a) (где …
2 ответа

Как писать / редактировать собственные сопрограммы в Прологе?

Я хотел бы построить свои собственные сопрограммы в Прологе. Я хотел бы добавить некоторые дополнительные функции.
03 май '14 в 21:37
2 ответа

Сопрограмма в Прологе: когда аргумент является списком (он имеет фиксированную длину)

Вопрос Можно ли запланировать выполнение цели, как только длина списка будет известна / исправлена, или, как указывает @false в комментариях, данный аргумент становится [правильным] списком? Что-то вроде этого: when(fixed_length(L), ... some goal ..…
19 янв '15 в 12:03
1 ответ

Замораживание цели в прологе

Я хочу заморозить свою цель, пока какая-то переменная, например, list, не будет неограниченной, прямо сейчас у меня есть sieve(N,L) :- freeze(Aux,sieve(N,L,[],Aux)), numlist(2,N,Aux). sieve(N,L,R,[H|T]) :- freeze(X, X mod H =\= 0 ; X == H), findall(…
0 ответов

Как использовать freeze/2 или когда / 2 для более чистого кода Пролога

Я написал предикат term_ctx_subterm/3, который представляет собой связь между термином, контекстом с одним отверстием для этого термина и подтермом, который заполняет дыру. По большей части предикат работает так, как я хочу. Смотрите код и примеры е…
01 ноя '16 в 15:15
2 ответа

Удалить ведущие s(s(0)) в списке

(Это продолжение этого вопроса). Как написать lead1(Xs,Ys) что верно, если Ys это суффикс Xs со всеми ведущими s(s(0)) сроки удалены. Таким образом, вместо удаления ведущих 0 Теперь этот вопрос касается удаления ведущих s(s(0)) s. По сравнению с пер…
04 окт '16 в 21:44
0 ответов

Обратное применение лямбда-выражения, eta+ альфа-преобразование в Прологе?

Есть несколько интересных проблем с совместной маршрутизацией. Например, мы хотим вернуть недостигнутые замороженные цели. Но есть проблема для систем Prolog, которые не поддерживают циклические термины. А именно замораживание: ?- freeze(V, p(...V..…
13 мар '16 в 11:44
2 ответа

Заморозить для более чем одной переменной

Я попытался написать предикат, который берет список и преобразует его в сбалансированное дерево. Мой код выглядит следующим образом: /* make_tree(list, tree) * * list: list with the elements of the tree in prefix order * tree: balanced tree of the e…
08 июн '15 в 12:19
1 ответ

Пролог отложил оценку: LIFO или FIFO пробуждение?

Многие системы Пролог имеют freeze/2 предикат, предикат, который, возможно, должен иметь имя geler/2 поскольку он был изобретен еще до Пролога-II. Предположим, у меня есть условие для одной и той же переменной, но двух разных целей, а именно: ?- fre…
2 ответа

При смешивании пролога сопрограммирования (заморозка /2, когда /2) и DCG

В моем предыдущем ответе на недавний вопрос " Тест дерева двоичного поиска Пролога - сравнение родительских узлов нежелательных родителей " я предложил смешать lazy_chain/2 который использует пролог-сопроводить... : - use_module ( библиотека (clpfd)…
15 янв '16 в 09:08
2 ответа

Заморозка / блокировка 2 целей по переменным, которые стали недоступны

Я сделал следующую небольшую программу, чтобы определить, используется ли память для таких целей, как freeze(X,Goal) восстанавливается, когда X становится недоступным: %:- use_module(library(freeze)). % Ciao Prolog needs this freeze_many([],[]). fre…
28 июн '15 в 00:49
1 ответ

Неожиданное поведение замороженного /2

Я играл с предикатами пролога-сопрограммы freeze/2 а также frozen/2: ?- freeze(X,a=a), frozen(X,Goal). ?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal). sicstus-prolog (версия 4.5.1 для x86_64) дал следующие ответы: |?- заморозить (X, a = a), за…
17 ноя '19 в 23:43
1 ответ

Овеществление земли в Прологе с атрибутивными переменными

Я работаю над собственной реализацией. Внутри,when/2должен уметь — за неимением лучшего слова — «овеществлять»ground/1. Выполнение этого с использованием переменных с атрибутами (в стиле SICStus-Prolog) - вот о чем этот вопрос. Моя реализация должна…
30 ноя '22 в 19:51