当前正在尝试使用谓词分类(+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.
非常感谢您的帮助!
最好连接"数字";致其";类";,在这种情况下是原子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...
";"防护";可以检查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