【问题标题】:Prolog: predicate to check if elements of a list are present in a pre-defined listProlog:用于检查列表元素是否存在于预定义列表中的谓词
【发布时间】:2022-02-25 20:01:50
【问题描述】:

我有一个事实定义为:

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

【问题讨论】:

    标签: prolog


    【解决方案1】:

    你有一个递归子句,但没有一个基子句。因此,当您完成遍历列表时,最后一次调用是 pred([]),这将失败,因为它没有与谓词的单子句的头部统一。

    【讨论】:

    • 我忘记写基本条款,但现在我已经编辑了我的问题。不幸的是,即使现在它也无法正常工作。
    • @TanaySoni 这是pred([]) 而不是pred([], [])
    • 你需要一个pred([]) 基本子句,但你写的是pred([],[])
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多