Lisp 中带有字符串的 Switch 语句。
(defun switch(value)
(case value
(("XY") (print "XY"))
(("AB") (print "AB"))
)
)
我想比较值是否为“XY”,然后为“AB”打印“XY”或相同。
我试过这段代码,但它给了我零。有人可以告诉我我做错了什么吗?
最佳答案
print("XY")
看起来更像 Algol(及其所有 descendants )而不是 LISP。要应用print
,可以将运算符和参数括在像(print "XY")
这样的括号中case
恰好是一个宏,您可以通过将引用的代码传递给 macroexpand
来自己测试结果,在我的实现中,我得到:
(let ((value value))
(cond ((eql value '"XY") (print "XY"))
((eql value '"AB") (print "AB"))))
您应该知道
eql
仅适用于原始数据类型和数字。字符串是序列,因此是(eql "XY" "XY") ;==> nil
也许您应该使用
case
以外的其他东西。例如。将 cond
或 if
与 equal
一起使用。关于switch-statement - Lisp 中的 switch 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35725991/