首页 > 解决方案 > 检查一个数字是否在两个值之间

问题描述

我是 prolog 的新手,并且正在尝试编写一个程序来执行以下操作,告诉我一个数字是否介于 2 个值之间,我可以执行以下操作:

between(L, X, R) :- 
    X > L, X < R.

并且做 between(1, 3, 5) 有效,但我希望它能够做 between(1, X, 5) 并让 prolog 返回介于两者之间的所有值,所以在这种情况下 X = 2, X = 3 ,X = 4,我明白为什么我的解决方案没有,因为它需要被初始化,但我想不出这个问题的解决方案,这种类型的事情不能在序言中完成吗?,帮助是十分感谢

标签: prologswi-prolog

解决方案


解决此问题的一种方法:

digit(0).
digit(1).
digit(2).
digit(3).
digit(4).
digit(5).
digit(6).
digit(7).
digit(8).
digit(9).

between(L, X, U) :- digit(L), digit(X), digit(U), L < X, X < U.

测试:

?- between(2, X, 5).
X = 3 ;
X = 4 ;
false.

?- between(2, 7, U).
U = 8 ;
U = 9.

或者,您可能想研究Constraint logic programming

顺便说一句,Prolog 已经有一个between/3

?- between(1, 5, X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5.

虽然它是“不合逻辑的”:你不能像上面的定义那样向后运行它。


推荐阅读