2017-04-17 122 views

回答

3

从考虑描述你想要的结果开始。您可以将分解为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