【问题标题】:How to do a parameter search in Prolog?如何在 Prolog 中进行参数搜索?
【发布时间】:2017-11-06 10:51:42
【问题描述】:

例如,有一个这样的“数据库”:

processor(pentium_g4400) :-
    brand('intel'),
    family('pentium'),
    series('g4400'),
    clock(3.3),
    socket('lga1151'),
    ram('ddr4'),
    cores(2),
    threads(2),!.

例如,如果我只想搜索“奔腾”系列或“lga1151”处理器。

【问题讨论】:

  • 这不是你在 Prolog 中陈述事实的方式。
  • 在这种情况下剪切的目的是什么?

标签: database search prolog


【解决方案1】:

那是不是一个数据库。你在这里写的是:

pentium_g4400processor,给定'intel' 是一个品牌,'pentium' 是一个family'g4400' 是一个系列,等等。

数据库是一组事实。所以你可以写成:

processor(pentium_g4400,'intel','pentium','g4400',3.3,'lga1151','ddr4',2,2).

现在您可以查询'pentium' 系列的处理器,例如:

processor(Proc, _, 'pentium', _, _, _, _, _, _).

其中_ 表示您对结果不感兴趣(如果您也想知道这些事实,可以使用变量)。

如果某些属性是可选的等,这种方法当然会不方便。您还可以为每个处理器添加术语列表,例如:

processor(pentium_g4400, [brand('intel'),    family('pentium'),
                          series('g4400'),   clock(3.3),
                          socket('lga1151'), ram('ddr4'),
                          cores(2),          threads(2)]).

在这种情况下,您可以查询:

processor(Proc, Specs), member(family('pentium'), Specs).

所以现在我们寻找一个处理器Proc 使得family('pentium')Specs 列表的成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2010-09-08
    相关资源
    最近更新 更多