Описание тега non-termination

In Prolog programs there are two kinds of non-termination: Existential and universal non-termination.
2 ответа

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

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

2-кувшин в прологе

Я пытаюсь решить проблему с 2-мя кувшинами в swi-прологе: учитывая 2 кувшина емкостью 4 и 3 галлона соответственно, я хочу найти шаги, чтобы получить 2 галлона в кувшине емкостью 4 и 0 в другом. Я написал программы для этой проблемы на C++, использу…
1 ответ

Обезьяна и банан в мышлении как вычисление

Я читаю книгу " Мышление как вычисление" и написал код в главе 9.4: plan(L) :- initial_state(I), goal_state(G), reachable(I, L, G). initial_state([]). legal_move(S, A, [A | S]) :- poss(A, S). goal_state(S) :- has_bananas(S). reachable(S, [], S). rea…
22 мар '16 в 07:52
0 ответов

Обнаружение некоторых циклов в целях Пролога, которые не заканчиваются универсально

TL;DR: этот вопрос об одном конкретном аспекте оценки кандидатов-сбоев-срезов. Следующий код ancestor_of/2 выражает транзитивное замыкание child_of/2: ancestor_of (X, Y): - child_of (Y, X). ancestor_of (X, Z): - child_of (Z, Y), ancestor_of (X, Y). …
3 ответа

Пытаетесь посчитать шаги через рекурсию?

Это куб, края которого направлены; Он может идти только слева направо, сзади вперед и сверху вниз. edge(a,b). edge(a,c). edge(a,e). edge(b,d). edge(b,f). edge(c,d). edge(c,g). edge(d,h). edge(e,f). edge(e,g). edge(f,h). edge(g,h). С помощью метода …
29 окт '12 в 12:23
2 ответа

Пункт Пролог заканчивается индивидуально, но не вместе

Так ?- canCall(mary, Person). работает и заканчивается и ?- canFind(mary, Person). также работает и заканчивается. Но почему-то ?- canCall(mary, Person), canFind(mary, Person). не прекращается. Что может быть возможной причиной?
1 ответ

Пролог - реализация некоторых основных арифметических операций

Я новичок в Прологе, и мне нужно реализовать некоторые основные арифметические операции над натуральными числами без использования встроенных предикатов. Я представляю натуральное число Term в унарной нотации, означая, что у меня есть константа 0 и …
2 ответа

Запись преемника Пролога дает неполный результат и бесконечный цикл

Я начал изучать Пролог и впервые узнал о записи преемника. И здесь я узнаю о написании аксиом Пеано в Прологе. Смотрите страницу 12 в PDF: sum(0, M, M). sum(s(N), M, s(K)) :- sum(N,M,K). prod(0,M,0). prod(s(N), M, P) :- prod(N,M,K), sum(K,M,P). Я по…
2 ответа

Предотвратить завершение приложения при возникновении общего исключения

Есть ли способ перехватить в одном месте все "необработанные" исключения и позволить приложению продолжить работу? Я вижу, что могу использовать setUncaughtExceptionHandler, чтобы сделать некоторую регистрацию и что-то еще, но приложение все еще зав…
20 дек '12 в 22:55
1 ответ

Есть ли способ реализации same_length/3 без вырезания?

Скажем, я хочу утверждать, что три списка имеют одинаковую длину. Я мог бы сделать что-то вроде этого: same_length(First, Second, Third) :- same_length(First, Second), same_length(Second, Third). Это правильно, когда либо First или же Second создают…
26 июн '18 в 02:28
0 ответов

Агда: как сделать неразрывную IO (getLine) без (устаревшей?) Коиндукции в стиле ∞?

В этом вопросе о том, как это сделать getLine в Агде основной ответ предлагает использовать монаду частичности, чтобы справиться с возможным прекращением работы с результирующей Costring. С другой стороны, в версии 2.5.3 страница руководства по Coin…
24 окт '17 в 19:49
1 ответ

Доказательство Ложь с отрицательными индуктивными типами в Coq

В третьей главе CPDT кратко обсуждается, почему отрицательные индуктивные типы запрещены в Coq. Если бы мы имели Inductive term : Set := | App : term -> term -> term | Abs : (term -> term) -> term. тогда мы могли бы легко определить функ…
05 июл '15 в 01:17
1 ответ

Найти путь и его длину между узлами в графе

Я пытаюсь решить эту проблему, и я уже прочитал этот ответ, но моя проблема с циклом infinte, даже если я использовал список посещенных узлов. Давайте посмотрим мои две попытки: edge(1,2). edge(1,4). edge(1,3). edge(2,3). edge(2,5). edge(3,4). edge(…
23 мар '16 в 19:30
2 ответа

Разбор пролога исчерпан

У меня есть этот код s(W) :- append(W1,W2,W), np(W1), vp(W2). vp(W) :- append(W1,W2,W), v(W1), np(W2). np(W) :- ( append(W1,W2,W), pn(W1), ph(W2) ; append(W1,W2,W), det(W1), n(W2) ). pn([hans]). ph([]). v([beobachtet]). n([mann]). n([fernrohr]). p([…
2 ответа

Преобразование предложения создает бесконечный цикл - но как?

Я не могу понять, где это идет не так. Обратите внимание, что я очень плохо знаком с Прологом и уверен, что что-то упустил - просто не знаю, что это может быть. Может ли кто-нибудь помочь мне, пожалуйста? Спасибо, вот мой код: printSentence([]). pri…
2 ответа

Не прекращающиеся индуктивные предикаты

В отличном программировании и испытаниях в Изабель /HOL говорится [...] в отличие от рекурсивных функций, для индуктивных определений нет требования завершения. (pdf стр. 40) Означает ли это, что существуют индуктивные определения, в которых возможн…
28 апр '17 в 07:04
1 ответ

Почему это вызывает бесконечную рекурсию?

У меня есть эта программа в прологе, где я в основном определяю график людей, и мне нужно сделать некоторые предикаты, которые покажут мне, какие люди связаны, а какие - клики. Вот факты: graph([person(susan, [reed, jen, andrzej, jessica]), person(r…
27 сен '14 в 14:04
1 ответ

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

Мы внедряем диагностические инструменты для объяснения неожиданного универсального отсутствия завершения в чистых, монотонных программах Prolog - на основе концепции среза-отказа. Как показано в статье " Локализация и объяснение причин неконтролирую…
1 ответ

Стойкость: определение и его связь с логической чистотой и окончанием

До сих пор я всегда принимал постоянство в программах Prolog: Если для запроса Q есть подзадача S такой, что есть термин T что делает ?- S=T, Q. преуспеть хотя ?- Q, S=T. терпит неудачу, то один из предикатов, вызываемых Q не стойкий Таким образом, …
2 ответа

Предикат Пролог - бесконечный цикл

Мне нужно создать предикат Пролога для степени 2 с натуральными числами. Натуральные числа: 0, s(0), s(s(0)) и т. Д. Например: ?- pow2(s(0),P). P = s(s(0)); false. ?- pow2(P,s(s(0))). P = s(0); false. Это мой код: times2(X,Y) :- add(X,X,Y). pow2(0,s…