我将事实定义为:
list([1,2,3,4,5]).
现在,我想写一个谓词 pred(X),如果列表中存在X的所有元素,它就会成功。例如,pred([1,3,4,2])应该成功,而pred([2,6,8])不应该成功。
我尝试了以下内容:
pred([],[]).
pred([H|T]) :- list(X), member(H,X), pred(T).
但是,它始终提供 false 。
答案 0 :(得分:2)
你有一个递归子句但不是一个基本子句。因此,当您完成遍历列表时,最后一次调用是pred([])
,这将失败,因为它没有与谓词的单个子句的头部统一。