Описание тега difference-lists
Распространенный метод программирования на чистых языках (но также и в других) для эффективного представления и обработки списков по мере их построения сверху вниз.
3
ответа
Пролог список отличий
Рассмотрим следующие программы: одна использует списки различий, а другая нет: reverse1(List1,R) :- rev1(List1, R-[]). rev1([], A-A). rev1([H|T], C-A) :-rev1(T, C - [H|A]). reverse2(List1,R) :- rev2(List1, R, []). rev2([], A, A). rev2([H|T], C, A) :…
18 янв '14 в 02:54
2
ответа
Я выяснил код для проверки равных a и b в списке, но не могу понять базовую рекурсию
s(A,A). s(A,D):- l(A,B),s(B,C),r(C,D). l([a|A],A). r([b|A],A). Приведенный выше код в прологе проверяет, имеют ли заданные входные данные списка равные a и b или нет. Такие как s([a,a,b,b],[]). True. Это включает в себя рекурсию и списки различий. М…
02 дек '18 в 07:29
2
ответа
Тестирование Пролога
Я читал о том, насколько велики списки различий, и я надеялся протестировать некоторые примеры из книг. Но кажется, что вы не можете передавать списки в качестве входных данных точно так же, как, например, append([1,2,3], [4,5], X), где X=[1,2,3,4,5…
09 июл '11 в 14:46
1
ответ
Список отличий (пролог)(логическое программирование)
У меня проблема с решением проблемы различий с помощью бумаги-карандаша не с помощью SWI Prolog (в настоящее время я готовлю экзамен по логическому программированию). Вот вопрос: q(X) :- p(X - []). p([X|Y] - Y). p([X|Y] - Z) :- p(Y - [X|Z]). Явно да…
30 июл '15 в 09:12
1
ответ
Список различий Пролога - mergesort
Я должен написать предикат, который разделит один список на два списка (пополам): halve(X-Y, X-Z, Z-Y) :- halve_pom(X-Y, X-Y, Z), !. halve_pom(Z-Y, Y-Y, Z). halve_pom([_|A]-Y, [_,_|B]-Y, Z) :- halve_pom(A-Y, B-Y, Z). Это было легко, но теперь я долж…
27 мар '13 в 00:40
3
ответа
Разница между "открытыми списками" и "списками различий"
В чем разница между "открытыми списками" и "списками различий"?
27 дек '12 в 17:13
1
ответ
Открытый список и член
Так как я хочу избежать стоимости append/3Я использую разницу / открытые списки. Однако проблема с открытым списком состоит в том, что member/2 реагирует с открытым списком, добавляя элемент в хвост. Например: ?- L=[a|_],member(b,L). L = [a, b|_G119…
07 июн '16 в 10:28
3
ответа
Переместить каждый второй элемент в конец списка, рекурсивно
Я ищу способ перетасовать список чисел определенным образом. shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) должен вернуться [1, 3, 5, 7, 9, 11, 2, 6, 10, 4, 12, 8] Рекурсия будет примерно такой: [1,3,5,7,9,11] with remainder [2,4,6,8,10,12] [2,6,…
02 окт '14 в 12:28
2
ответа
Конвертировать функтор Пролог в функтор с разностными списками
Я работаю над домашней работой для Пролога (SWI), но не могу понять, как это сделать: У меня есть функтор: palindrome([]). palindrome([_]). palindrome([A|T]) :- append(Middle,[A],T), palindrome(Middle). который сообщает, является ли данный список па…
13 мар '12 в 12:11
1
ответ
Палиндром (домашнее задание)
Я пытался написать программу Prolog, используя списки. Тем не менее, я должен использовать списки различий и вывод должен быть: I-й элемент списка совпадает с (n-i+1)-ым элементом списка, а n - это длина списка. Например, [a,X,c,b,Y] должен дать X =…
30 июн '15 в 08:20
1
ответ
Пролог "append_dl/3" обертка
Я только изучаю Пролог и концепцию списков различий в Прологе, так что терпите меня, пожалуйста. У меня есть следующий код: :- op(400, xfx, \). append(Xs, Ys, Zs) :- append_dl( [Xs|T1]\T1, [Ys|T2]\T2, Zs\[]). append_dl( Xs\Ys, Ys\Zs, Xs\Zs). Теперь,…
14 ноя '17 в 10:32
2
ответа
Почему списки различий не являются экземплярами складных?
Пакет dlist содержит DList тип данных, который имеет много экземпляров, но не Foldable или же Traversable, На мой взгляд, это два самых "похожих на список" класса типов. Есть ли причина производительности, которая DList не является экземпляром этих …
23 мар '13 в 17:03
1
ответ
Понимание концепции списков различий
Пока я читал главу 13 из Real World Haskell я натолкнулся на концепцию Difference Lists,Автор говорит, что на императивном языке, если мы хотим добавить элемент в список, стоимость будет O(1) так как мы будем держать указатель на последний элемент. …
06 фев '19 в 08:25
2
ответа
Что означает символ "-" в Прологе при работе со списками?
Я читал ответ на этот вопрос, p(X) :- read(A), q(A,X-[]). q(end,X-X) :- !. q(A,[A|X]-Y) :- read(B), q(B,X-Y). Приведенный выше код использует синтаксис List-List. Я немного понимаю, что происходит, но я хочу знать, что именно здесь делает символ / п…
16 мар '13 в 23:38
2
ответа
Haskell: Свести бинарное дерево
Я думал о сведении двоичного дерева в список для последующей обработки. Я впервые подумал об использовании (++) присоединиться к левой и правой ветвям, но потом подумал, что в худшем случае это займет O(n^2) время. Затем я подумал о создании списка …
15 май '12 в 01:02
2
ответа
Понимание списков различий
Я пытаюсь понять списки различий в Прологе, но я изо всех сил пытаюсь реализовать его должным образом, каждый раз, когда я пытаюсь это сделать, я получаю список списков, но это не то, что я хочу. Я пытаюсь реализовать предикат добавления, но пока мн…
17 ноя '14 в 05:22
3
ответа
Структура (списки различий) Пролог
Этот вопрос относится к материалу в главе 3 книги: Программирование на Прологе, Clocksin and Mellish, Ed 5 На странице 72 этой книги отображается программа, использующая список различий: partsOf(X,P):- partsacc(X,P,Hole) , Hole=[]. partsacc(X,[X|Hol…
21 янв '14 в 18:29
2
ответа
Почему пролог выводит странный древовидный список?
В этом коде Пролога я собираюсь перечислить первые N простых чисел, (...) biggerPrime(N,P) :- isPrime(N), P is N, !. biggerPrime(N,P) :- N1 = N+1, biggerPrime(N1,P). primeListAcc(0,A,R,R) :- !. primeList(N,L) :- primeListAcc(N,1,[],L). primeListAcc(…
31 мар '13 в 19:45
1
ответ
Списки различий в Прологе и изменяемых переменных
Являются ли списки различий средством "обойти" тот факт, что переменные являются неизменяемыми в прологе? Т.е. если я реализую добавление используя списки различий: diff_append(OpenList, Hole, L2) :- Hole = L2. А затем запустите: X=[a,b,c|Hole], dif…
10 авг '15 в 11:21
2
ответа
Почему списки различий более эффективны, чем обычная конкатенация?
В настоящее время я пробираюсь через книгу " Learn you a haskell" в Интернете и пришел к главе, где автор объясняет, что некоторые объединения списков могут быть неэффективными: например, ((((a ++ b) ++ c) ++ d) ++ e) ++ f Якобы неэффективно. Решени…
14 дек '12 в 13:04