Common lisp 公共Lisp中重复的case语句
这里一定有更好的方法,对吧Common lisp 公共Lisp中重复的case语句,common-lisp,Common Lisp,这里一定有更好的方法,对吧 (format t "Enter your age: ~%") (defun age-case (age) (case age (1 (format t "You belong in Kindergarden~%")) (2 (format t "You belong in Kindergarden~%")) (3 (format t "You belong in Ki
(format t "Enter your age: ~%")
(defun age-case (age)
(case age
(1 (format t "You belong in Kindergarden~%"))
(2 (format t "You belong in Kindergarden~%"))
(3 (format t "You belong in Kindergarden~%"))
(4 (format t "You belong in Kindergarden~%"))
(5 (format t "You belong in Preschool~%"))
(6 (format t "Elementary school ~%"))
(t (format t "Somewhere else"))))
(defvar *age* (read))
(age-case *age*)
Python中的P>我会使用1…4的例子,在C++、java和Co中,我可能会使用一个故障切换的情况,在1到3的情况下,我不需要中断。在没有代码复制的clisp中,有没有一个巧妙的小技巧可以做到这一点?您可以这样使用:
(defun age-test ()
(format t "Enter your age: ~%")
(finish-output)
(let ((age (read)))
(format t (cond ((member age '(1 2 3 4)) "You belong in Kindergarden~%")
((= age 5) "You belong in Preschool~%")
((= age 6) "Elementary school ~%")
(t "Somewhere else")))))
(age-test)
case
子句可以接受多个键:
(取消年龄案例(年龄)
(病例年龄)
((1 2 3 4)(格式t“您属于幼儿园~%”)
(5)(格式t“您属于学龄前儿童~%”)
(6)(格式t“小学~%”)
(t(格式t“其他地方”))
如果范围过于繁琐,无法手动填写,例如1到100
,最好使用cond
:
(续)
((另一个选项是使用类型说明符:
CL-USER > (let ((age 6))
(typecase age
((integer 1 4) 'one-to-four) ; integers from 1 to 4
((eql 5) 'five)
((eql 6) 'six)
(t 'something-else)))
SIX
也(