【问题标题】:Find how many same objects exist找出有多少相同的对象存在
【发布时间】:2011-05-28 18:36:11
【问题描述】:

我有这个代码

color(blue).
color(red).
color(blue).
color(green).

我想制定一个规则来计算 X 颜色存在的次数。 对于这种情况,count_color(X) 应该返回 2。

这样可以吗,还是我必须列出颜色?

【问题讨论】:

  • 你的意思是在调用count_color(blue, X)之后,X应该是2?
  • 这个问题与this earlier one 涵盖相同的基础,除了这两个之外,它还提供了一种此处尚未描述的解决方法(断言/撤回)。

标签: prolog


【解决方案1】:

aggregate/3 在 ISO prolog 中不存在,因此并非在所有实现中都可用。但是您可以使用findall/3 获得相同的结果,如下所示:

count_color(Color, N) :- findall(_, color(Color), List), length(List, N).

【讨论】:

    【解决方案2】:

    可以使用aggregate/3 谓词:

    count_color(Color, N) :- aggregate(count, color(Color), N).
    

    使用aggregate/3的指针:aggregate/3 in swi-prolog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-08
      • 2016-07-21
      • 1970-01-01
      • 2010-09-07
      • 2018-12-26
      • 2020-11-20
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多