【问题标题】:Prolog predicate regarding list manipulation关于列表操作的 Prolog 谓词
【发布时间】:2013-11-24 05:18:52
【问题描述】:

例如:给定 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) 为真。

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

【问题讨论】:

    标签: prolog predicate


    【解决方案1】:

    subtract/3

    items(A, X, Y) :- subtract(X, Y, A).
    

    如果您保持列表排序(即像集合一样),ord_subtract/3 是一个更好的选择

    edit:抱歉没用的答案,这是修改后的答案。 相关的列表处理谓词是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].
    

    【讨论】:

    • 糟糕。你是对的,我没有正确阅读你的问题,我的回答完全没有抓住重点......现在编辑......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2017-09-29
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多