簡體   English   中英

以下兩個Prolog列表之間有什么區別?

[英]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]結構之間的差異。 [1,2,3,X] vs [1,2,3 | X]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM