-1

我有一个列表 L ,我需要将每个元素拆分为一个单独的列表,然后再次将它们附加在一起。这是我为相同的代码。

split([],[]).
split([H|T],Ls):-split(T,Ls),splist(H,[]).
make(Val,[H1|List],[H1|Res]):- make(Val,List,Res). make(Val, List,[Val|List]).
splist(H,L2):- make(Sum,[],L1),append(L1,L2,NewL).

当我使用此代码时,L 的每个元素都从 split() 递归传递到 splist(),并通过 make() 将其制成具有单个元素的列表 L1。我需要追加以保持连接 L1 和 L2。但事实并非如此

例如,我有 L=[1,2,3]。现在我需要完成以下过程。

H=1,L1=[1] 和 L2=[1]。接下来 H=2,L1=[2] 和 L2=[1,2]。接下来 H=3,L1=[3] 和 L2=[1,2,3]。

我需要上面提到的输出,但这就是我的代码所做的。

H=1,L1=[1],L2=[1]。接下来 H=2,L1=[2] 和 L2=[2]。接下来 H=3,L1=[3] 和 L2=[3]。

4

1 回答 1

1

我无法理解您的代码。make定义不完整。照原样,它什么也不做,然后失败。

split相当于split(X,[]):- reverse(X,R), maplist(spl([]),R).with spl(B,A):-splist(A,B).,即它尝试向后输入列表splist(H,[])的每个元素,看看它是否失败 - 这是它唯一的结果,因为参数是固定的 -和.HXH[]

命名你的谓词splitsplist一个非常糟糕的主意 - 我们人类天生就可以从开头区分单词,而这些名称中唯一不同的字母隐藏在接近结尾的地方。IOW 这两个名字非常相似,很容易误读和打错。

最后,splist(H,L2):- make(Sum,[],L1),append(L1,L2,NewL).因为makecn 只会失败,所以也会失败splist。但是,即使是凭空make产生了一些东西——开始时没有实例化你——它说的是什么?它可以附加到列表中吗?任何列表都可以附加到任何其他列表中,也就是说什么都不说。L1SumL2L1

?? :)

于 2013-05-09T06:15:58.140 回答