如果你想利用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