我输入了一个数字列表,并且必须生成一个新列表,其中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。你们能指出错误吗?谢谢!
答案 0 :(得分:1)
您的代码中有两个错字:
在基本情况下,将L
替换为[]
。
在第二个递归子句中,将newIndex
替换为NewIndex
。
即当输入列表为空时(或在处理完其元素后到达列表末尾),输出列表也将为空列表。 Prolog中的变量以下划线或大写字母开头。