使用prolog将数字分类为大、中或小



当前正在尝试使用谓词分类(+N,?Classification(解决Prolog类中的一个问题:小数字在50以下,中等数字在50到100之间(包括50和100(,大数字在100以上。例如,分类(24,X(应该在X=small的情况下成功。

我已经记下了简单的分类,但我不确定如何设置实际的谓词。

small(X) :- X < 50.
medium(X) :- X >= 50, X =< 100.
big(X) :- X > 100. 

非常感谢您的帮助!

最好连接"数字";致其";类";,在这种情况下是原子smallmediumbig中的一个。这符合练习的要求:

% 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...

";"防护";可以检查CCD_ 4是用";CCD_ 5是一个数字";,而不是其他东西,可能是一个尚未绑定的变量。根据可以省略的情况,否则可以使用类似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

最新更新