Common Lisp 裡 case 的 keyform 如果是 quoted symbol 的正確寫法

正確寫法

(defun abc (size)
  (case size
    (x1 "md:hover:border-2")
    (x2 "md:hover:border-4")
    (x3 "md:hover:border-6")
    (otherwise nil)))
;; (abc 'x2)

寫成這樣會報錯

(defun abc (size)
  (case size
    ('x1 "md:hover:border-2")
    ('x2 "md:hover:border-4")
    ('x3 "md:hover:border-8")
    (otherwise nil)))
;; (abc 'x2)

2 compiler notes:

src/views/block.lisp:6:5:
style-warning:
Duplicate key QUOTE in CASE form, occurring in the first clause:
('X1 "md:hover:border-2"), and the second clause:
('X2 "md:hover:border-4").

src/views/block.lisp:7:5:
style-warning:
Duplicate key QUOTE in CASE form, occurring in the second clause:
('X2 "md:hover:border-4"), and the third clause:
('X3 "md:hover:border-6").

所有的 AI 只有 Claude.ai 的回答是正確的,還能給出原因

考你,這段代碼正確嗎?
(defun abc (size)
(case size
('x1 "md:hover:border-2")
('x2 "md:hover:border-4")
('x3 "md:hover:border-6")
(otherwise nil)))
;; (abc 'x3)

Edit
這段 Lisp 代碼在語法上是正確的,但有一個潛在問題:

語法正確性:

defun 函數定義語法正確
case 語句結構正確
引用符號 'x1, 'x2, 'x3 使用正確
otherwise 子句作為默認情況是標準寫法
潛在問題: 在 case 語句中,測試值應該是常量,不需要引用。正確的寫法應該是:

lisp
(defun abc (size)
(case size
(x1 "md:hover:border-2")
(x2 "md:hover:border-4")
(x3 "md:hover:border-6")
(otherwise nil)))
為什麼:

case 會自動將測試值視為符號,不需要手動引用
使用 'x1 等於在尋找符號 'x1,而不是符號 x1
雖然在某些 Lisp 實現中可能仍然工作,但這不是標準寫法
測試呼叫:

lisp
(abc 'x3) ; 這個呼叫是正確的,因為我們傳入的是符號
所以代碼功能上可能可以運行,但最佳實踐是移除 case 子句中的引用符號。