Sag*_*921 2 lisp common-lisp switch-statement
用Lisp中的字符串切换语句.
(defun switch(value)
(case value
(("XY") (print "XY"))
(("AB") (print "AB"))
)
)
Run Code Online (Sandbox Code Playgroud)
我想比较值是"XY"然后打印"XY"或"AB"相同.我试过这段代码,但它给了我零.有人可以告诉我我做错了什么吗?
print("XY")看起来更像是Algol(及其所有后代),而不是LISP.要应用print一个将围绕运算符和括号中的参数,如(print "XY")
case碰巧是一个宏,你可以自己测试结果,将引用的代码传递给macroexpand我的实现,我得到:
(let ((value value))
(cond ((eql value '"XY") (print "XY"))
((eql value '"AB") (print "AB"))))
Run Code Online (Sandbox Code Playgroud)
您应该知道eql这只适用于原始数据类型和数字.字符串是序列,因此(eql "XY" "XY") ;==> nil
也许你应该使用别的东西case.例如.使用cond或if与equal.
您可以使用alexandria具有可配置switch宏的库:
(switch ("XY" :test 'equal)
("XY" "an X and a Y")
("AB" "an A and a B"))
Run Code Online (Sandbox Code Playgroud)