是否有可能將每個第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