例如:给出3个陈述:
car(toyota,[sedan,5_seater,head_rest]).
car(nissan,[4_seater,sedan,2_door,head_rest,blue]).
car(peugeot,[head_rest,sedan,5_seater,sun_roof]).
如果A是包含X中所有部分但不包含Y中任何部分的列表车,如何编写Prolog谓词items(A, X, Y)
。
真的希望有人可以帮助我。提前谢谢!
答案 0 :(得分:0)
请参阅subtract / 3
items(A, X, Y) :- subtract(X, Y, A).
如果您对列表进行排序(例如套装),ord_subtract / 3是一个更好的选择
编辑:抱歉无用的答案,这是修改后的答案。 相关的列表处理谓词是intersection / 3,而setof / 3是一个强大的列表'构造函数'。
items / 3可以用这种方式编写
items(A, Present, Miss) :-
setof(Car, Parts^(car(Car, Parts),
intersection(Parts, Present, Present),
intersection(Parts, Miss, [])), A).
因为您的数据库有点微薄,要测试我输入
?- items(L,[sedan],[blue]).
L = [peugeot, toyota].