我只需要删除列表中的一个事件。其实不管是第一个还是最后一个。需要删除一场比赛。
我无法理解为什么以下内容无法按预期工作。
deleteOne(_,[],[]).
deleteOne(Term, [Term|Tail], Result) :-
deleteOne(Term, [], [Result|Tail]), !.
deleteOne(Term, [Head|Tail], [Head|TailResult]) :-
deleteOne(Term, Tail, TailResult), !.
输出
41 ?- deleteOne(5,[2,3,1,5,2,3,1],X).
X = [2, 3, 1, 5, 2, 3, 1].
当我用空字符串或一些随机字符串替换术语时,它会起作用。
deleteOne(Term, [Term|Tail], Result) :-
deleteOne("", Tail, Result), !.
输出
41 ?- deleteOne(5,[2,3,1,5,2,3,1],X).
X = [2, 3, 1, 2, 3, 1].
但由于许多原因,我认为这不是最好的解决方案。不是针对我当前的问题,而是针对更长的列表。或者如果一个列表包含空字符串 - 不知道这在 Prolog 中是否可行。
为什么第一个示例不起作用?还有哪些其他解决方案?