使用序言将数字分类为大、中或小?
Classifying a number as big, medium, or small using prolog?
目前正在尝试使用谓词 classify(+N, ?Classification) 解决我的 class for Prolog 中的问题:
小数在 50 以下,中数在 50 到 100(含)之间,大数在 100 以上。例如,classify(24, X) 应该成功且 X = small。
我有简单的 class说明,但我不确定如何设置实际谓词。
small(X) :- X < 50.
medium(X) :- X >= 50, X =< 100.
big(X) :- X > 100.
非常感谢任何帮助!
最好将“数字”连接到它的“class”的代表,在本例中是原子small
、medium
、big
。这符合练习要求:
% classify(+N, ?Classification)
classify(N, small) :- ...guard...test N for smallness...
classify(N, medium) :- ...guard...test N for mediumness...
classify(N, big) :- ...guard...test N for bigness...
“守卫”可以检查 classify/2
是用“N
一个数字”调用的,而不是其他东西,也可能是一个尚未绑定的变量。根据可以省略的情况,否则可以使用像 must_be/2
:
这样的谓词
所以我们写:
classify(N, small) :- must_be(number,N), N < 50.
classify(N, medium) :- must_be(number,N), N >= 50, N =< 100.
classify(N, big) :- must_be(number,N), N > 100.
我们还知道,对于 N
,三种情况中只有一种可以成功,因此我们可以告诉 Prolog,如果已经成功,则无需尝试替代方案,方法是使用 !
在前两个子句的末尾(你也可以将它添加到第三个子句,但它在那里什么都不做,它是最后一个子句):
classify(N, small) :- must_be(number,N), N < 50, !.
classify(N, medium) :- must_be(number,N), N >= 50, N =< 100, !.
classify(N, big) :- must_be(number,N), N > 100.
等等:
?- classify(100,How).
How = medium.
?- classify(100,big).
false.
?- classify(100,medium).
true.
?- classify(N,medium).
ERROR: Arguments are not sufficiently instantiated
目前正在尝试使用谓词 classify(+N, ?Classification) 解决我的 class for Prolog 中的问题: 小数在 50 以下,中数在 50 到 100(含)之间,大数在 100 以上。例如,classify(24, X) 应该成功且 X = small。
我有简单的 class说明,但我不确定如何设置实际谓词。
small(X) :- X < 50.
medium(X) :- X >= 50, X =< 100.
big(X) :- X > 100.
非常感谢任何帮助!
最好将“数字”连接到它的“class”的代表,在本例中是原子small
、medium
、big
。这符合练习要求:
% classify(+N, ?Classification)
classify(N, small) :- ...guard...test N for smallness...
classify(N, medium) :- ...guard...test N for mediumness...
classify(N, big) :- ...guard...test N for bigness...
“守卫”可以检查 classify/2
是用“N
一个数字”调用的,而不是其他东西,也可能是一个尚未绑定的变量。根据可以省略的情况,否则可以使用像 must_be/2
:
所以我们写:
classify(N, small) :- must_be(number,N), N < 50.
classify(N, medium) :- must_be(number,N), N >= 50, N =< 100.
classify(N, big) :- must_be(number,N), N > 100.
我们还知道,对于 N
,三种情况中只有一种可以成功,因此我们可以告诉 Prolog,如果已经成功,则无需尝试替代方案,方法是使用 !
在前两个子句的末尾(你也可以将它添加到第三个子句,但它在那里什么都不做,它是最后一个子句):
classify(N, small) :- must_be(number,N), N < 50, !.
classify(N, medium) :- must_be(number,N), N >= 50, N =< 100, !.
classify(N, big) :- must_be(number,N), N > 100.
等等:
?- classify(100,How).
How = medium.
?- classify(100,big).
false.
?- classify(100,medium).
true.
?- classify(N,medium).
ERROR: Arguments are not sufficiently instantiated