gpt4 book ai didi

generics - Clojure 相当于 Haskell 的 "Scrap Your Boilerplate"(SYB)

转载 作者:行者123 更新时间:2023-12-02 16:52:34 24 4
gpt4 key购买 nike

我在 Haskell 中发现了一个有趣的库,名为 Scrap Your Boilerplate基于paper by Simon Peyton Jones这似乎是一种有效的方法,可以用函数式编程语言编写可以更新大型、深层嵌套数据结构的代码。它启用如下代码:

incS :: Float -> Salary -> Salary
incS k (S s) = S (s * (1+k))

increase :: Float -> Company -> Company
increase k = everywhere (mkT (incS k))

这可以有效地将潜在庞大且复杂的公司数据结构中每个人的工资提高固定比例 k。

是否有等效的库或方法可以在 Clojure 中实现相同类型的编程风格?

例如,我如何编写与上面使用的示例等效的 Clojure:

(defn increase [company k]
(everywhere-in company (transform-map-values :salary #(* % (+ 1 k))))

最佳答案

Clojure 中与此最接近的可能是“in”函数(assoc-in、update-in、dissoc-in)。

这些函数允许您在 clojure 中进行深度嵌套、精确的更改。 Haskell 中没有与这些函数等效的函数,因为它们严重依赖动态类型。

关于generics - Clojure 相当于 Haskell 的 "Scrap Your Boilerplate"(SYB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376572/

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