列表中的双元素从N到N,代码为false

时间:2019-01-23 09:36:48

标签: prolog

我输入了一个数字列表,并且必须生成一个新列表,其中N到N的元素加倍。例如:

?-double([1,2,3,4,5,6,7],2,L). returns L=[1,2,2,3,4,4,5,6,6,7] (in this case N=2)

?-double([1,2,3,4,5,6,7],3,L). returns L=[1,2,3,3,4,5,6,6,7] (in this case N=3)

我想出了以下代码:

double(List, N, L) :- double(List, N, 1, L).

double([], N, Index, L).

double([H|T], N, Index, [H,H|L]) :-
    Index =:= N,
    double(T,N,1,L).

double([H|T], N, Index, [H|L]) :-
    Index =\= N,
    newIndex is Index + 1,
    double(T,N,newIndex,L).

不幸的是,我的代码返回了false。你们能指出错误吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码中有两个错字:

  1. 在基本情况下,将L替换为[]

  2. 在第二个递归子句中,将newIndex替换为NewIndex

即当输入列表为空时(或在处理完其元素后到达列表末尾),输出列表也将为空列表。 Prolog中的变量以下划线或大写字母开头。