我是Prolog世界的新手,我想编写一条返回特定范围内所有元素的规则.
我打算做点什么
例如:
foo(X, Low, High) :- X > Low, X < High.
Run Code Online (Sandbox Code Playgroud)
当我输入foo(X,2,5)时,它应该返回3,然后是4.
看来我的方法是错误的,我想知道哪种方法是正确的.
当这样写的时候,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)
简单的答案between/3:
?- between(3,4,X).
X = 3 ;
X = 4.
Run Code Online (Sandbox Code Playgroud)
通过这种方式实现确切的行为是微不足道的.
你的方法不起作用的原因是定义</2:两个参数都应该被实例化.所以,如果你想在不使用的情况下实现它,between/3你应该做一些类似svick的建议.
| 归档时间: |
|
| 查看次数: |
3967 次 |
| 最近记录: |