gpt4 book ai didi

clojure - 以下 clojure 代码如何运行?

转载 作者:行者123 更新时间:2023-12-01 07:58:20 27 4
gpt4 key购买 nike

我从 clojuredoc 中阅读了关于 condp 的文档。在文档中我找到了以下代码:

(condp 一些 [1 2 3 4]
#{0 6 7} :>> 公司
#{4 5 9} :>> 十二月
#{1 2 3} :>> #(+ % 3))

上面代码的结果是3。但是我不明白为什么。

如果有人能帮我解决这个问题?告诉我代码是如何运行的。

谢谢~

最佳答案

当然,让我们从一个更简单的案例开始:

user> (condp some [1 2 3 4] 
#{5} :>> inc
:the-default-value)

:the-default-value

构建这个测试:

user> (some #{5} [1 2 3 4])
nil

因为测试返回一些虚假的东西(nil 是虚假的)它跳过这个子句并在末尾返回默认值,因为没有更多的子句要检查。

如果我们使用一个通过的测试

user> (condp some [1 2 3 4] #{1}  :>> inc :the-default-value)
2

它构建测试:

user> (some #{1} [1 2 3 4])
1

结果为真 (1),因此搜索停止并接受该子句。 :>> 告诉 condp 获取测试结果并将其传递给后面的函数,在本例中为 inc。结果为 2

因此在原始示例中,第一个测试是:

(some #{0 6 7} [1 2 3 4]) 

nil 所以这种情况不被接受并继续搜索。第二个测试是:

user> (some #{4 5 9} [1 2 3 4])
4

结果为真值 4,因此它在值 4 上调用提供的函数 dec:

user> (dec 4) 
3

搜索停止。

关于clojure - 以下 clojure 代码如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494165/

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