剪辑中的切换功能

The switch function in clips

请问“切换”功能。我想实现以下功能:

(switch ?student
  (case (stu1 or stu2 or stu3) then
   -------)
  (case stu4 then
   ------))

如何让多项选择执行同一个动作?

如果您在 case 关键字之后放置函数调用,则该函数调用必须 return switch 关键字后面的值才能应用 case 的操作。因此,您可以定义一个辅助函数,它传递 switch 关键字后面的值和应该应用大小写的值列表。如果该值在值中,则仅 return 将应用该值和大小写。如果不是,那么只需取反该值,然后将不会应用 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>