我尝试删除带有偶数索引的元素。 这是我的代码:
DOMAINS
list = integer*
PREDICATES
remove(list,list)
CLAUSES
remove([],[]).
remove([_,H|T1], [H|T2]):-
remove(T1, T2).
GOAL
remove([1,2,3,4,5], NewList).
我错过了列表中的第一项,并将第二项保存在新列表NewList
中。
但只有当列表的长度为偶数时才能正常工作。
我错过了什么?也许我的方法错了?
答案 0 :(得分:2)
是的,您的谓词仅适用于包含偶数元素的列表。 remove/2
的第一个子句用于空列表(无元素),第二个子句用于包含两个或更多元素的列表。然后你传递剩下的,没有前面的两个元素。
对于具有奇数个元素的列表,您需要一个只包含一个元素的列表的基本情况。逻辑是,如果你开始计算索引为0,你有: