关于列表操作的Prolog谓词

时间:2013-09-23 08:28:55

标签: prolog predicate

例如:给出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)

真的希望有人可以帮助我。提前谢谢!

1 个答案:

答案 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].