请询问关于“switch”函数的问题。我希望实现以下功能:
(switch ?student (case (stu1 or stu2 or stu3) then -------) (case stu4 then ------))
如何让多个选择执行相同的操作?
回答:
如果在case关键字后放置一个函数调用,那么该函数调用必须返回与switch关键字后面的值相同的值,才能应用case的操作。因此,您可以定义一个辅助函数,该函数接收switch关键字后的值和一组应应用case的值。如果该值在这些值中,则只需返回该值,case就会被应用。如果不在其中,则否定该值,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>