首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >域声明中的CLPFD "OR“条件

域声明中的CLPFD "OR“条件
EN

Stack Overflow用户
提问于 2021-07-09 12:57:26
回答 1查看 38关注 0票数 0

在下面的问题中,有没有一种方法可以表达OR条件,而不引入额外的谓词p (这是Project Euler1):

代码语言:javascript
复制
:- use_module(library(clpfd)).

p(B) :-
  B in 0..1000,
( B mod 3 #= 0 ; B mod 5 #= 0 ),
  indomain(B).

euler_001(A) :-
  aggregate_all(sum(B), p(B), A).

如果我将;放在相同的目标中:

代码语言:javascript
复制
euler_001(A) :-
  B in 0..1000,
( B mod 3 #= 0 ; B mod 5 #= 0 ),
  aggregate_all(sum(B), indomain(B), A).

结果实际上是:

代码语言:javascript
复制
?- euler_001(R).
R = 166833 ;
R = 100500.

这在直觉上是有道理的,因为;会产生回溯,所以会计算两次和,一次计算可被3整除的数字,一次计算可被5整除的数字。

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 13:18:32

答案:

代码语言:javascript
复制
:- use_module(library(clpfd)).

euler_001(A) :-
  B in 0..1000,
  B mod 3 #= 0 #\/ B mod 5 #= 0,
  aggregate_all(sum(B), B, A).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68311471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档