案例陈述/表格错误?

问题描述 投票:0回答:1
emacs 29.1
sbcl 2.4.0 
slime 2.29.1

这是我的功能:

(defun my-case ()
  (case 'a
    (b "hello")
    (a "world")
    (otherwise "mars")))

当我编译它时,

C-c C-k
,我在迷你缓冲区中看到以下内容:

在史莱姆repl中,我看到:

; processing (DEFUN MY-CASE ...)

; file: /var/tmp/slimeckqotJ
; in: DEFUN MY-CASE
;     (CASE 'A (B "hello") (A "world") (OTHERWISE "mars"))
; --> COND IF PROGN 
; ==>
;   "hello"
; 
; note: deleting unreachable code

; --> COND IF IF THE PROGN 
; ==>
;   "mars"
; 
; note: deleting unreachable code
; 
; compilation unit finished
;   printed 2 notes

并且,在我的源文件中,“case”一词带有下划线:

但是,我的函数运行良好:

CL-USER> (my-case)
"world"

什么是“笔记”?

common-lisp
1个回答
0
投票

注释告诉您子句

(b "hello")
(otherwise "mars")
无法访问。

评估

case
形式的第一个参数以生成用于测试子句的密钥。在
my-case
中,keyform 参数始终计算为符号
a
,因此编译器可以看到只有一种可能的结果。

当只有一种可能的结果时,

case
表格没有多大用处。这是一个不会触发编译器注释和删除无法访问的代码的版本:

(defun my-case (&optional (k 'a))
           (case k
             (b "hello")
             (a "world")
             (otherwise "mars")))
CL-USER> (my-case)
"world"
CL-USER> (my-case 'b)
"hello"
CL-USER> (my-case 'guitars)
"mars"
© www.soinside.com 2019 - 2024. All rights reserved.