Scheme语言中的Case命令

问题描述 投票:1回答:1

我试图了解如何将case命令与Scheme中的变量一起使用

(define CONSTANT 5) 
(define x 5)
(case x ((CONSTANT) "equal") (else "not equal"))

上面的示例导致“不相等”。为什么?

请注意,以下示例有效:

(define CONSTANT 5)
(define x 5)
(case x ((5) "equal") (else "not equal"))
switch-statement scheme lisp
1个回答
0
投票

如果您查看documentation,则表示:

[selected子句是第一个具有datum的子句,其quoted形式为quotedequal?的结果。

这里的关键词是“ quoted”。子句中的表达式不被评估,按原样使用。因此,实际上您正在尝试与symbol equal?进行匹配。我们可以验证一下:

val-expr

UPDATE:从注释看来,您需要将元素与常量列表进行匹配。'CONSTANT+ (define x 'CONSTANT) (case x ((CONSTANT) "equal") (else "not equal")) => "equal" 会更好:

cond
© www.soinside.com 2019 - 2024. All rights reserved.