以prolog方式检查列表元素的关系列表

时间:2014-06-07 15:54:23

标签: list prolog

我是prolog的新手,

我无法访问我在此处检查的列表元素的关系 - Checking a relation of a prolog list element 但我觉得好像没有完全回答我的问题。

我拥有拥有汽车的关系,即你需要钱和工作才能买车

vehicle(car).
own(car, [money, job]).

然后我有一个类似

的列表
[[money, job], [car]]

我想查看列表,看看moneyjob是否存在car元素。

所以,例如,如果我有类似

的东西
test([[money, job], [car]]).
OUTPUT: true

但是如果是

test([[job], [car]]).
OUTPUT : false

由于钱不存在

所以我的问题是,是否有可能检查列表关系的列表元素列表以查看列表元素是否可以考虑需求而存在,如果不存在,处理这样的事情的最佳方法是什么?

编辑:我希望能够测试一堆东西,例如

 vehicle(truck).
 own(truck, [money, job]).

 own(motorbike, [money, job]).
 thing(money).
 own(job, [suit]).
 vehicle(car).
 own(car, [money, job]).

 List of lists : test([[suit], [money, job] , [car, truck, motorbike]]) : True
                 test([[money, job] , [car, truck, motorbike]]) : False since you can't have job without money
                 test([[suit], [job] , [car], [truck], [motorbike]]) :False because you can't have car without owning money, same for truck and motorbike - but will fail on car
                  test([[car], [suit] , [money, job]]): False, because you can't have car without money or job which is after it.

看看我来自哪里?

此致

1 个答案:

答案 0 :(得分:2)

基本上,您要检查某个列表中的每个元素是否都显示在另一个列表中。您可以使用intersection\3来执行此操作(还有许多其他方法):

test(Want, Have) :-
    own(Want, Need),
    intersection(Need, Have, Need).

测试运行(签名与您提供的不同,但我认为这更有意义,而且您的语法也有语法错误):

?- test(car, [money, job]).
true.

?- test(car, [job, money]).
true.

?- test(car, [job]).
false.

?- test(car, [money, strength]).
false.

?- test(car, [money, strength, job]).
true.
相关问题