【发布时间】:2017-12-05 04:58:21
【问题描述】:
我试图以递归方式将列表的头部附加到原子,但是 prolog 不断返回 false,我无法确定原因。
我的原始代码:
listpicket(K, [H1|T1], L) :-
append([K], [H1], L),
listpicket(K, T1, L).
运行方式:
?- listpicket(k, [a,b,c], L).
预期输出:
[k, a, k, b, k, c].
实际输出:
false.
怀疑 false 来自最后一次递归迭代,没有尾部(T1,此处),我尝试像这样处理这种情况:
listpicket(K, [H1|T1], L) :-
(
not(is_list(T1)),
[K|T1]
);
append([K], [H1], L),
listpicket(K, T1, L).
但我也得到false 作为结果。
我做错了什么?
【问题讨论】:
-
append表示添加在末尾而不是开头。 -
@LuaiGhunim 我知道,这就是为什么我将头部附加到我的原子上。这样我就得到了
[k, a, k, b, ...]。因此,尝试将列表的头部附加到我的变量K到一个新列表L中,并通过将列表的尾部传递给递归调用来递归地重复(获取该新列表的头部等)。 -
你得到 false 因为你没有基本情况,而且你第二次调用 append 它会失败
标签: prolog