【发布时间】:2015-02-05 14:05:34
【问题描述】:
我正在尝试创建一个给出的程序:combine([[1],[2,3]],Q)。它将生成:Q=[1,2,3]。
换句话说,如果我得到一个元素列表,我需要将它们全部附加到一个列表中。不是每个元素都可以是一个列表,所以我必须让任何非列表元素成为列表,以便可以追加。列表元素中包含的任何其他元素都无关紧要。
到目前为止我的尝试:
combine(L,Q) :- match(L,Q).
match([],Q).
match([H|T],Q) :- H = [], append(H,Q,Z), match(T,Z).
match([H|T],Q) :- H = [_|_], append(H,Q,Z), match(T,Z).
match([H|T],Q) :- append([H],Q,Z), match(T,Z).
我的想法是,当我调用辅助函数时,我会尝试找出 H 是列表还是非列表。如果它是一个非列表,它会将 H 放入一个列表并将其附加到递归传递的列表中。当列表到达末尾时,顶部事实取消。可悲的是,我得到的是 Q = [giberish,giberish,...]; Q = [更多的胡言乱语,....];
编辑:修正了我需要什么的描述。
【问题讨论】:
-
您希望
Q来自combine([[1],[2,[3]]],Q)? -
我希望:Q=[1,2,[3]]。
标签: list recursion prolog append