gpt4 book ai didi

clojure - 统一访问具有概率字段的 Clojure 记录

转载 作者:行者123 更新时间:2023-11-30 23:56:49 25 4
gpt4 key购买 nike

是否有一种优雅的方式来创建和使用混合了常量和概率字段的记录。我希望能够执行类似下面的操作,其中“采样器”是一个从某个分布返回样本的函数。目标是让用户清楚访问的文件是常量还是概率。

> (defrecord Stat [val1 val2])

> (def s1 (Stat. 1 sampler))

> (:val1 s1)

> 1

> (:val2 s1)

> 4

> (:val2 s1)

> 2

最佳答案

对于自定义 deftypes,让关键字查找以不同于简单地在映射中查找固定值的方式运行是可能的,但我强烈建议不要这样做。这不仅需要大量工作,而且会违背阅读您代码的每个人的期望。

但是,对您的要求稍作调整会产生一个简单的解决方案:代替 (:val1 x),编写 (x :val1)。现在 x 可以简单地是一个函数,它让它接收到的输入决定它的行为:

user> (defn stat [distributions]
(fn [sample]
((get distributions sample))))

#'user/stat
user> (def s1 (stat {:val1 (constantly 1)
:val2 #(rand-int 5)}))
#'user/s1
user> (s1 :val1)
1
user> (s1 :val2)
3
user> (s1 :val2)
4

关于clojure - 统一访问具有概率字段的 Clojure 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561721/

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