我是prolog的新手,
我无法访问我在此处检查的列表元素的关系 - Checking a relation of a prolog list element 但我觉得好像没有完全回答我的问题。
我拥有拥有汽车的关系,即你需要钱和工作才能买车
vehicle(car).
own(car, [money, job]).
然后我有一个类似
的列表[[money, job], [car]]
我想查看列表,看看money
和job
是否存在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.
看看我来自哪里?
此致
答案 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.