Prolog:将大小为N的列表拆分为两个已知大小为K和N-K的列表

时间:2018-06-13 07:06:53

标签: list split prolog

我有一个整数列表,键,并希望将其拆分为两个列表ListOfReqKeys和ListOfRewKeys,如标题中所述。

Keys =[1, 1, 3, 9, 1, 15]
ReqK = 3
ListOfReqKeys = [1, 1, 3], ListOfRewKeys = [9, 1, 15]

这两个列表的长度是已知的,分别是ReqK和RewK。

append(ListOfReqKeys, ListOfRewKeys, Keys),
atom_codes(At, ListOfReqKeys),
atom_number(At, ReqK).

是否有内置谓词或更快的方法?

1 个答案:

答案 0 :(得分:2)

没有分裂。只有附加。

将长度N的列表拆分为长度为K的前缀,必然会留下长度为N-K的后缀 - 无需衡量/ 创建 1 就是这样。它只是 所以,通过构造。

因此,

split( K, L, A, B):-
   append( A, B, L),
   length(A, K).

简单,不是。但等等,可以改进吗?没有添加或删除任何东西?我们还能用它做什么呢?

1 提示:你有没有试过length(X, 2)length(X, N)