2012-08-12 36 views
2

我加入列表,当我用MyArray|MyElement我打印到屏幕上,我得到的元素(和分裂):列表添加

[OBJ1,OBJ2] | obj3

这是不正确的,是吗?理想情况下,我希望它是:

[OBJ1,OBJ2,OBJ 3]

如果我使用MyArray|[MyElement]打印出来给我:

[OBJ1,OBJ2] | [Obj3]

这是相当于[Obj1,Obj2,Obj3]?

回答

2

使用语法[ MyElement | MyArray ],你会得到

[Obj3, Obj1, Obj2] 

这就是所谓的“包含”一个元素到列表中。你也可以使用一个append/3断言,这样的:

append(MyArray, [MyElement], X). 

产生

X = [Obj1, Obj2, Obj3] 
1

想通了,它因为我追加到列表的末尾和尾部始终是一个数组....

0

我不知道如果我理解你的问题,但我会尽力帮助。

试试这个,如果你的作品:

add2end(X,[],[X]). 
add2end(X,[H|T],[H|NewT]):-add2end(X,T,NewT). 

而对于分裂:

分裂(L,N,L1,L2): - 列表L1中包含的第N个元素 列表L,列表L2包含剩余的元素。 (?,+,?,?)

split(L,0,[],L). 
split([X|Xs],N,[X|Ys],Zs) :- N > 0, N1 is N - 1, split(Xs,N1,Ys,Zs).