Prolog-如何将元素附加到列表末尾

时间:2021-05-02 15:15:23

标签: prolog

我正在尝试编写一个函数,其中给定变量和列表的列表,将返回所有未中断变量的第一个列表,如下所示: 这个值 [_1, _2, _3, _4, [1, 3], _5, _6] 将返回 [_1, _2, _3, _4]

代码返回 false,我猜 append 函数正在将 Esp 列表与 [P] 和 Esp1 的串联进行比较,我该如何解决这个问题? 我希望 Esp 是 [P, Esp1]。

我的代码:

espaco_aux([P|R],Esp,Esp1) :-
   var(P), espaco_aux(R, _, Esp1), append([P],Esp,Esp1).

My code as an image

1 个答案:

答案 0 :(得分:0)

首先,由于您希望 Esp 是 P 和 Esp1 的串联,因此您需要 concat([P],Esp1,Esp)。其次,你需要一个终止案例,给你:

espaco_aux([P|R],Esp) :-
   var(P), !, espaco_aux(R, Esp1), append([P],Esp1,Esp).

espaco_aux(_,[]).

但是你可以进一步简化它,用模式匹配替换 append:

espaco_aux([P|R],[P|Esp1]) :-
   var(P), !, espaco_aux(R, Esp1).

espaco_aux(_,[]).