递归列表创建

时间:2019-02-17 22:33:30

标签: list recursion prolog

我在SWI-prolog中的列表上停留在此问题上。 在Prolog中,变量只能写入一次,因此我无法处理此问题。

check(Parameter, [H | T], Result) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

因此,谓词check / 3接受一个参数,一个列表,并给我最终结果。 get_res / 3给了我一个中间结果,用作check / 3递归情况的输入。 因此,在结果中,每个递归调用都必须具有Res。 我尝试在递归调用之前使用append([Parameter],[],Result),但第一次成功,然后由于无法重写Result而失败。 我知道我也需要一个基本情况,可能是check(_,[],[])。 但我什至不知道

1 个答案:

答案 0 :(得分:0)

要递归将结果添加到输出中,可以将代码修改为:

check(_,[],[]).
check(Parameter, [H | T], [Res|Result]) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

在这种情况下,基本大小对于具有正确的工作功能也很重要。调用check / 3时,请确保Result的参数是变量s.t。这可以正常工作。