是否有可能将每个第i个元素从列表复制到子列表中只是一个三元谓词子列表(Element,List1,List2)和内置的长度和追加? 我知道,使用4元素的辅助谓词,它变得相当微不足道,但它不是我所需要的。 有人可以提出一个策略吗?Prolog每个子元素中的第i个元素
0
A
回答
2
一些内建的声明解决方案是非常简单:
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鲍里斯的建议
1
您可以使用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].
所以,如果你想要说列表的第5个元素,你可以采取的第二个参数的头:
?- 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
如果我正确理解此代码,它只是寻找和元素列表中给定的数字。我所需要的是将每一个第i个元素复制到列表中。像这样:sublist([1,2,3,4],2,X)。 X = [2,4]。这段代码有帮助吗?元素搜索可以更容易完成。我错过了什么吗? – user3614293 2014-09-20 04:01:26
+2
你问过一个策略,而不是一个解决方案。看看编辑一个更大的提示。 – 2014-09-20 13:11:01
相关问题
- 1. Python的映射值,每个第i子列表的元素
- 2. Prolog - 给出列表中的每个第n个元素
- 3. 第i个元素的值更改影响ArrayList中第0个元素的值
- 4. 元素在矩阵的第i行“<=”vecotor的第i个元素
- 5. 返回列表中每个元素的第一个元素?
- 6. 第i个和第i + 1个元素循环的习惯clojure
- 7. 访问第i个元素,它位于ArrayList的元素内
- 8. 取出倒数第二个元素 - Prolog
- 9. 的第一个子元素
- 10. 如何获得列表中每个元素的第二个子元素
- 11. 将(每个)元素移动到第一个匹配的元素
- 12. 选择元素之后的每一个元素,除了第一个孩子
- 13. Prolog的创建从第i个数组中的元素的集列表
- 14. 片远在每个(名单)第一个元素元素在Python
- 15. 在另一个元素内选择每第四个元素
- 16. 在JavaScript中使用常见“父元素”的“第一个孩子”元素调用“第二个孩子”元素
- 17. 计算元组列表中第i个元素的平均值
- 18. 为元素数组中的每个元素赋值每个元素jQuery
- 19. CSS第n个子公式选择第7个元素和第5个元素
- 20. 得到jquery中元素的第n个子元素号
- 21. $。每个只影响第一个元素?
- 22. 通过base px * n第n个元素缩进每个第n个元素
- 23. 如何获得每个元素的第二元素列表
- 24. 去除或掩盖倾斜张量的第I个子元素?
- 25. 如何选择第一要素,从每个子元素
- 26. 删除每个子元素除了第一个孩子吗?
- 27. 如何用jQuery在每个元素中选择子元素?
- 28. 在2d列表中引用每个列表的第i个元素
- 29. 迭代数组中的每个元素(第一个元素除外)
- 30. 获取每个父元素的最高子元素的高度
findall/3没有任何错误,并声明不聚集在一起。 – false 2014-09-20 20:54:54
关于箭头,(条件 - > WhenTrue; WhenFalse)。我没有得到其他问题 – CapelliC 2014-09-21 05:37:56