[英]What's the difference between following two Prolog lists?
我對以下兩個列表的區別感到困惑:
K = [1,2,3 | X].
和
K = [1,2,3,X].
書中Bratko的問題,實際上是在上下文conc
。
conc定義為:
conc([], L, L).
conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).
現在的實際問題是,如果在
conc([1,2,3], [X], L2).
L2與查詢K = [1,2,3|X].
中的K = [1,2,3|X].
是相同的列表K = [1,2,3|X].
我不認為L2和K是相同的,但我不太確定如何解釋它。 L2是兩個列表的串聯。 K是我不確定的變量X的連接,可以通過列表填充...
還在學習Prolog,如果這是一個“愚蠢”的問題,請原諒我。
在Prolog中,每個列表都是空列表( []
)或頭部和尾部( [A | X]
)。 Head是第一個元素,tail是列表的其余部分。
例子:
[1]
實際上是[1 | []]
[1 | []]
[1, 2]
是[1 | [2 | []]]
[1 | [2 | []]]
[1,2,3 | [4, 5]]
[1,2,3 | [4, 5]]
與[1,2,3,4,5]
相同(不同於4元素列表[1,2,3,[4,5]]
)。 所以在你的例子中, L2
是[1,2,3,X]
,這是帶有最后一個元素X
四個元素列表。 同時K
是[1,2,3|X]
,它是以1,2,3
開始並且具有X
所有元素的列表。
下圖顯示了[1,2,3,X]
和[1,2,3|X]
結構之間的差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.