从Prolog中检索给定间隔中的所有数字

use*_*689 3 prolog clpfd

我是Prolog世界的新手,我想编写一条返回特定范围内所有元素的规则.

我打算做点什么

例如:

foo(X, Low, High) :- X > Low, X < High.
Run Code Online (Sandbox Code Playgroud)

当我输入foo(X,2,5)时,它应该返回3,然后是4.

看来我的方法是错误的,我想知道哪种方法是正确的.

svi*_*ick 6

当这样写的时候,Prolog不知道你想要什么样的数字(以及你是否想要数字).

实现这一目标的一种方法是:

range(X, L, H) :- X is L + 1, X < H.
range(X, L, H) :- L1 is L + 1, L1 < H, range(X, L1, H).
Run Code Online (Sandbox Code Playgroud)


Tha*_*dis 5

简单的答案between/3:

?- between(3,4,X).
X = 3 ;
X = 4.
Run Code Online (Sandbox Code Playgroud)

通过这种方式实现确切的行为是微不足道的.

你的方法不起作用的原因是定义</2:两个参数都应该被实例化.所以,如果你想在不使用的情况下实现它,between/3你应该做一些类似svick的建议.