确定列表是否有效prolog

时间:2018-04-06 05:32:18

标签: prolog

我正在编写一个程序来检查列表是否有效。这是我到目前为止所知道的,我知道它应该是简短的我只是无法理解prolog

这些是我的事实

pkg(pkg_name)
pkg(p1)
pkg(p2)
dpnd(p2,p1)

我的规则将是true_list() 这个函数将运行如下,如果我选择true_list([p1,p2])然后它应该返回true,如果我true_list([p1,p3,p2])它应该返回false,因为p3不是它的一部分。我已经看了一会儿,感觉应该这么简单。我试过这个方法

true_list(p1,p2):-package(package_name).

任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

对此最好的解决方案是使用简单的递归谓词检查每个元素是否存在。

代表?- true_list([p1,p2]).

pkg(pkg_name).
pkg(p1).
pkg(p2).
dpnd(p2,p1).

%your input is a list of elements [Element1, Element2, Element3...ElementN]
true_list([]).
true_list([H|T]) :-  
  (pkg(H) ->  
    (true_list(T)) ; 
    (fail)
  ).  

此代码检查列表中的每个元素,以查看它是否作为事实pkg存在,如果找到的元素不是pkg则会失败。它也会以空列表成功。