我需要使用 Prolog 为给定的整数等级值绑定字母等级(>= 90 是 a,>= 80 是 b,依此类推。)
evaluate_grade( X , f ) :- X >= 0.0 , X < 2.0.
这很好用:
evaluate_grade( 0.1 , G ) .
但是如果有人输入非数字值,例如:
evaluate_grade(blahblah , G ) .
您可以遵守只接受地面号码的规则:
evaluate_grade( X , f ):-
number(X),
X >= 0.0 , X < 2.0.
试运行:
?- evaluate_grade(0.95, X).
X = f.
?- evaluate_grade(hello, X).
false.
must_be/2
:
evaluate_grade( X , f ):-
must_be(number, X),
X >= 0.0 , X < 2.0.
试运行:
?- evaluate_grade(0.95, X).
X = f.
?- evaluate_grade(hello, X).
ERROR: Type error: `number' expected, found `hello' (an atom)
ERROR: In:
ERROR: [14] throw(error(type_error(number,hello),_24502))
ERROR: [10] evaluate_grade(hello,f) at c:/swi/workspace/file1.pl:2174
ERROR: [9] toplevel_call(user:user: ...) at c:/swi/swi8-devel/boot/toplevel.pl:1173
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.