将成绩绑定到 Prolog 中的数值

问题描述 投票:0回答:1

我需要使用 Prolog 为给定的整数等级值绑定字母等级(>= 90 是 a,>= 80 是 b,依此类推。)

evaluate_grade( X , f ) :- X >= 0.0 , X < 2.0.

这很好用:

evaluate_grade( 0.1 , G ) .

但是如果有人输入非数字值,例如:

evaluate_grade(blahblah , G ) .

error-handling prolog
1个回答
0
投票

您可以遵守只接受地面号码的规则:

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.
© www.soinside.com 2019 - 2024. All rights reserved.