gpt4 book ai didi

clojure - 为什么 "(def vowel? (set "aeiou"))"工作?

转载 作者:行者123 更新时间:2023-12-03 20:19:52 24 4
gpt4 key购买 nike

我正在看优秀的 Clojure 教程 here .在其中一个示例中,它具有以下几行的 Clojure 代码:

(def vowel? (set "aeiou"))

这使得元音对元音返回真,对辅音返回假:
(vowel? (first "abc")) ; => true
(vowel? (first "cba")) ; => false

为什么是这样?我假设它与变量名称后面的问号有关。在教程中无法立即找到任何内容...

编辑 我才意识到 vowel?不返回 true 或 false,而是返回元素本身或 nil。看我自己的回答。

最佳答案

这与 map (Clojure 中最自然的对象)的工作方式非常相似。当映射作为函数调用时,它作为映射工作:

user=> (def ob {:foo "bar", :bar :baz, :qwerty 42})
#'user/ob
user=> (ob :foo)
"bar"

因此,可以将 Clojure 集作为函数调用并用作成员资格测试是有道理的。顺便说一句,如果你使用关键字(那些以冒号开头的东西)作为映射的键,它们也可以作为类似的功能,所以你可以这样做
user=> (:bar ob)
:baz

甚至与关键字集相同的事情:
user=> (def vowel-keywords (set [:a :e :i :o :u]))
#'user/vowel-keywords
user=> (:a vowel-keywords)
:a
user=> (:b vowel-keywords)
nil

但是,同样,后一种技巧仅适用于关键字,而不适用于您可能用作映射中的键或集合中的成员的任何其他内容。

关于clojure - 为什么 "(def vowel? (set "aeiou"))"工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686375/

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