gpt4 book ai didi

clojure 部分说明

转载 作者:行者123 更新时间:2023-12-04 10:04:33 24 4
gpt4 key购买 nike

我正在阅读一本关于 clojure 的书,我遇到了一个我不完全理解的例子。

这是repl中的代码:

user=> (repeatedly 10 (rand-int 10))
ClassCastException java.lang.Integer cannot be cast to clojure.lang.IFn clojure.core/repeatedly/fn--4705 (core.clj:4642)

user=> (repeatedly 10 (partial rand-int 10))
(5 0 5 5 2 4 8 8 0 0)

我的问题是:
为什么是 partial这里需要,以及它如何适应 partial定义,
repeatedly定义和语法。部分的 ...
Takes a function f and fewer than the normal arguments to f, and
returns a fn that takes a variable number of additional args. When
called, the returned function calls f with args + additional args.

那么这如何适应呢?

最佳答案

partial实际上并不检查它的第一个参数支持哪些参数;一个可以说更准确的文档字符串会说它“接受一个函数 f 和一些 f 的参数”。 (很明显,如果你提供太多参数,得到的部分应用函数将被破坏,尽管只有当你尝试调用它时才会观察到。)这就是为什么 (partial rand-int 10)即使 rand-int 的参数数量也没有问题提供的不是“比正常少”。

原因要么partial或类似 #(rand-int 10)这里需要的是repeatedly期望它的最后一个参数是一个可以重复调用的函数,而 (rand-int 10)将是一个数字。

将此与 repeat 进行比较它返回一个序列,其中提供的项目重复指定的次数(或在一元情况下无限次)。这里(rand-int 10)将是一个合适的第二个参数,但当然它会是某个特定的数字,所以结果看起来像 (8 8 8 8 8 ...) ; repeatedly将单独调用 (partial rand-int 10)对于返回的序列中的每个项目,您将从中获得一个(可能不同的、独立的)随机数序列。

关于clojure 部分说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15982792/

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