我正在尝试编写一个函数,其中给定变量和列表的列表,将返回所有未中断变量的第一个列表,如下所示: 这个值 [_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).
答案 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(_,[]).