首页 > 解决方案 > 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).

我的代码作为图像

标签: prolog

解决方案


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

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

espaco_aux(_,[]).

但是您可以通过将附加替换为模式匹配来进一步简化它:

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

espaco_aux(_,[]).

推荐阅读