将列表拆分为两部分,其中第一部分的长度为

将列表拆分为两部分,其中第一部分的长度为

问题描述:

我想创建一个函数,在第一部分的长度给定的情况下,我们将列表拆分为2。将列表拆分为两部分,其中第一部分的长度为

split(L,0,[],L). 

任何想法?

+4

使用长度/ 2并追加/ 3 – CapelliC

+0

优雅! (我参考之前的评论)。递归解决方案很好,但使用长度和附加方式更容易。 –

从考虑描述你想要的结果开始。您可以将分解为StartEnd,并且Start的长度应为Length

split(List, Length, Start, End) :- 
    length(Start, Length), 
    append(Start, End, List). 

作为注,lengthappend订单将使效率的差异。如果append被放在第一位,那么追加将统一StartList的第一个零元素,并将在长度检查上失败,然后将统一Start与第一个元素,然后前两个,然后三个,依此类推,直到它到达前缀为List,长度为Length。您可以首先将length目标放在第一位,这样可以避免所有这些明显的死胡同,这将以一个正确大小的列表开始。

+0

很可能是他的功课。 –

+2

不错,但不是最好交换这两个目标吗? – false

+2

@false肯定会的。我会交换这些,并添加一个解释,为什么一种方式更好。感谢您指出了这一点。 – jcolemang