问题描述
(switch ?student
(case (stu1 or stu2 or stu3) then
-------)
(case stu4 then
------))
如何使多个选择执行相同的操作?
解决方法
如果将函数调用放在case关键字之后,则该函数调用必须返回switch关键字之后的值,以便应用案例的操作。因此,您可以定义一个辅助函数,该函数将在switch关键字后面的值以及应该应用该大小写的值的列表传递给该函数。如果该值在这些值之中,则只需返回该值,便会应用大小写。如果不是,则只需取反该值,然后case语句的操作将不会应用。
CLIPS (6.31 6/12/19)
CLIPS>
(deffunction oneof (?v $?values)
(if (member$ ?v ?values)
then ?v
else (not ?v)))
CLIPS>
(deffunction grade (?student)
(switch ?student
(case (oneof ?student stu1 stu2 stu3)
then B-)
(case stu4
then A+)))
CLIPS> (grade stu1)
B-
CLIPS> (grade stu2)
B-
CLIPS> (grade stu3)
B-
CLIPS> (grade stu4)
A+
CLIPS>