剪辑中的切换功能
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>
请问“切换”功能。我想实现以下功能:
(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>