如果你想利用N
元素從List
前,這就像從List
的尾部前端取N - 1
個元素,加入了List
的負責人。毫不奇怪,從任何東西中取0個元素都是一個空列表。 (請記住,您可以將List
解構爲[Head | Tail]
。)
編輯:爲什麼take(N, List, Front):- length(Front, N), append(Front, _, List).
工作?
因爲length
和append
都做了類似上述的事情。 length(Front, N)
將使Front
爲[F1, F2, F3... FN]
,其中N
未知。 _
可以是任何東西,所以它可以是一些未知的列表。然後append(Front, _, List)
去連接兩個未知的列表,並將連接的每個元素等同於List
的元素。舉例來說,如果你有N
爲2,List
爲[1, 2, 3, 4, 5]
,然後append(Front, _, List)
將確保[F1, F2, U1, U2, U3]
比賽List
:
append([F1, F2], _, [1, 2, 3, 4, 5])
斷言F1 = 1
和append([F2], _, [2, 3, 4, 5])
。這斷言F2 = 2
和append([], _, [3, 4, 5])
。這又是append
的突破條件,其斷言_ = [3, 4, 5]
,這是平凡的。所以Front = [F1, F2] = [1, 2]
。
length
構建[F1, F2]
的方式類似:length(First, 2)
斷言length(FirstTail, 1)
,而這個斷言length(FirstTailTail, 0)
,這是休息狀態,所以FirstTailTail = []
,這使得First = [F1 | [F2 | []]] = [F1, F2]
。
謝謝,肯定會工作,但由於某種原因,如果我改變採取(N,列表,前): - 長度(前,N),追加(前,[],列表)。 (N,List,Front): - 長度(Front,N),追加(Front,_,List)。它工作正常。有人可以解釋爲什麼。 – killuminati
我的意思是這個:取(N,List,Front): - 長度(Front,N),追加(Front,_,List)。 – killuminati
感謝您的解釋,它使得它更清晰。 – killuminati