gpt4 book ai didi

Clojure `case` 不区分不同的符号

转载 作者:行者123 更新时间:2023-12-02 18:36:15 25 4
gpt4 key购买 nike

此代码有效:

(case '-
+ :plus
- :minus
:unknown)
==> :minus

这也是:

(case '-
+ :plus
'- :minus
* :times
:unknown)
==> :minus

这不会:

(case '-
'+ :plus
'- :minus
* :times
:unknown)
==> java.lang.IllegalArgumentException: Duplicate case test constant: quote

谷歌搜索此错误会导致 log file here 。然而,那家伙只是说它可以在删除引号的情况下工作。

看起来 case 语句将不同的符号视为相同的值。为什么会这样?

TIA。

最佳答案

来自案例文档:

Each clause can take the form of either:

test-constant result-expr

(test-constant1 ... test-constantN) result-expr

'- 扩展为 (quote -)

因此,带引号的情况下的子句扩展为:

(quote -) :minus
(quote +) :plus

如您所见,符号“quote”显示为实际测试常量,当您同时引用 + 和 - 时,它会出现两次。

评估实际符号quote上的case可能会澄清一些事情:

user=> (case 'quote '+ :plus - :minus :unknown)
:plus
user=> (case 'foo (foo +) :plus - :minus :unknown)
:plus

关于Clojure `case` 不区分不同的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com