Можно ли скопировать каждый элемент i из списка в подсписку с только один тройной подсписчик предиката (Элемент, List1, List2) и встроенная длина и добавление? Я знаю, с 4-элементными вспомогательными предикатами, он становится довольно тривиальным, но это не то, что мне нужно. Можно ли предложить стратегию?Пролог каждый элемент i в подсписке
ответ
с некоторыми встроенными командами декларативным решения очень просто:
sublist(Element, List1, List2) :-
findall(E, (nth1(I, List1, E), 0 is I mod Element), List2).
пока явно итерация:
sublist(Element, List1, List2) :-
( N is Element-1,
length(T, N),
append(T, [E|R], List1)
-> sublist(Element, R, ListR),
List2 = [E|ListR]
; List2 = []
).
, где вы можете увидеть, как у вас se Boris '
Вы можете использовать lentgth/2
с первым аргументом переменных и вторым целым, чтобы создать список не экземпляры переменных, например:
?- length(L, 4).
L = [_G936, _G939, _G942, _G945].
Если теперь использовать append/3
с этим списком в качестве первого аргумент, и переменная, как вторые, он будет разделен список в вашем третьем аргументе:
?- length(A, 4), append(A, B, [a,b,c,d,e,f,g,h]).
A = [a, b, c, d],
B = [e, f, g, h].
так что если вы хотите сказать, что пятый элемент списка, вы могли бы взять на себя голова второго аргумента:
?- length(A, 4), append(A, [Fifth|Rest], [a,b,c,d,e,f,g,h]).
A = [a, b, c, d],
Fifth = e,
Rest = [f, g, h].
Это не решение, но действенная стратегия:
every_ith(I, In, [X|Ys]) :-
N is I - 1,
length(Prefix, N),
append(Prefix, [X|Xs], In),
every_ith(I, Xs, Ys).
Если я правильно понял этот код, он просто ищет и элемент с заданным номером в списке. Однако мне нужно было скопировать * каждый элемент * в список. Например: подсписк ([1,2,3,4], 2, X). X = [2,4]. Помогает ли этот код? Поиск элемента может быть проще. Я что-то упускаю? – user3614293
Вы просили стратегию, а не решение. Посмотрите на редактирование для большего намека. – 2014-09-20 13:11:01
- 1. Пролог дедушка (i, i)
- 2. Пролог получить каждый второй элемент в списке
- 3. Элемент выбора пролога в подсписке
- 4. Пролог специфический элемент поискового подсети
- 5. Jquery re-binding каждый элемент I unbinded
- 6. каждый элемент массива в каждый элемент
- 7. Как изменить каждый i-й элемент массива в Modelica
- 8. Элемент списка переупорядочивания - Пролог
- 9. Каждый массив [i] в интервале
- 10. Пролог сравнить элементы списка в головной элемент
- 11. Найти элемент в подсписке из списка в прологе
- 12. Пролог DCG: найти последний элемент
- 13. Пролог: Удалить последний элемент списка
- 14. Как отменить элементы в подсписке?
- 15. Пролог: как найти определенный элемент в списке?
- 16. Пролог: переместить последний элемент в список вперед
- 17. Пролог Подытоживая последний элемент в списках
- 18. Max в подсписке в списке
- 19. Заменить каждый элемент взрывается
- 20. Ошибка в подсписке списка в C#
- 21. Свернуть кратные столбцы в подсписке
- 22. получить матчи XPath в подсписке
- 23. Задайте позиции в пользовательском подсписке
- 24. Добавить каждый элемент в строку
- 25. Пролог в списке
- 26. Пролог: получать и добавлять каждый третий элемент из списка в новый список
- 27. Как отправить значение i в элемент a [i]?
- 28. Javascript массив, Разбираем каждый элемент умножить каждый элемент на «х»
- 29. Пролог поможет удалить или пропустить элемент, добавив
- 30. Пролог: не получит самый большой элемент
findall/3 без каких-либо ошибок и декларативных данных не собраны. – false
О стрелке, (Условие -> WhenTrue; WhenFalse). Я не задаю другого вопроса – CapelliC