我的下一个实验室有这个任务:
“编写一个谓词,在列表中的每个偶数元素之后添加值1.”
我认为我需要递归函数。这就是我在想的事情
addE([],_,[_]).
addE([H|T], _,[H|TR]):-addE(T,_,TR).
addOneEven([],[]).
addOneEven([H|T],[H|TR]):-
H mod 2 =:= 0, addE([H|H], 1, [H|TR]),
addOneEven(T,TR).
它一直让我失意。
我想说明我是prolog语言的新手。 谢谢!
答案 0 :(得分:1)
你可以写一下:
addOneEven([],[]).
addOneEven([H|T],[H|T1]):-
H mod 2 =:= 1,
addOneEven(T,T1).
addOneEven([H|T],[H1|TR]):-
H mod 2 =:= 0,H1 is H+1,
addOneEven(T,TR).
你的addE谓词并不是非常有用,因为它只遍历列表而不向任何元素添加任何内容,另一个问题是你必须有一个H mod 2 =:= 1的情况的子句。