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 以外的其他东西。例如。将 condifequal 一起使用。

关于switch-statement - Lisp 中的 switch 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35725991/

10-15 00:29