我正在编写一个程序来检查列表是否有效。这是我到目前为止所知道的,我知道它应该是简短的我只是无法理解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).
任何帮助都将受到赞赏。
答案 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
则会失败。它也会以空列表成功。