小编dam*_*san的帖子

如何在SWI-Prolog中复制预定义长度/ 2的行为?

我试图复制标准长度/ 2谓词的行为.特别是,我希望我的谓词适用于有界和无界的参数,如下例所示:

% Case 1
?- length(X, Y).
X = [],
Y = 0 ;
X = [_G4326],
Y = 1 ;
X = [_G4326, _G4329],
Y = 2 ;
X = [_G4326, _G4329, _G4332],
Y = 3 .

% Case 2    
?- length([a,b,c], X).
X = 3.

% Case 3
?- length(X, 4).
X = [_G4314, _G4317, _G4320, _G4323].

% Case 4
?- length([a,b,c,d,e], 5).
true.
Run Code Online (Sandbox Code Playgroud)

简单实用:

my_length([], 0).
my_length([_|T], N) :- my_length(T, X), N is 1+X.
Run Code Online (Sandbox Code Playgroud)

有一些问题.在案例3中,在产生正确答案之后,它进入无限循环.这个谓词可以转化为确定性的吗? …

prolog clpfd

10
推荐指数
1
解决办法
1447
查看次数

Postgres int4range上限意外值

使用PostgreSQL 9.4:

SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::numrange x) q;
> [1,2] | 1 | 2      -- looks OK

SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::int4range x) q;
> [1,3) | 1 | >>3<<  -- this is unexpected
Run Code Online (Sandbox Code Playgroud)

让我们进一步检查:

SELECT x, lower(x), upper(x) FROM (SELECT '[1,3)'::numrange x) q1;
> [1,3) | 1 | 3      -- looks OK

SELECT x, lower(x), upper(x) FROM (SELECT '[1,3]'::numrange x) q1;
> [1,3] | 1 | 3      -- looks OK
Run Code Online (Sandbox Code Playgroud)

来自pg文档:

upper(anyrange)| 范围的元素类型| 范围的上限| …

postgresql range upperbound

5
推荐指数
1
解决办法
1057
查看次数

标签 统计

clpfd ×1

postgresql ×1

prolog ×1

range ×1

upperbound ×1