如果我们将clojure函数juxt推广到juxe,即juxe返回一个哈希映射而不是向量,那么这个函数juxe有用吗?

如果我们将clojure函数juxt推广到juxe,即juxe返回一个哈希映射而不是向量,那么这个函数juxe有用吗?,clojure,Clojure,在一些函数式编程书籍中,他们将tuple定义为[abc]形式,将entity定义为{:ax:bycz}形式 如果我们把juxt中的t作为元组的概念,我们可以用e作为实体的概念,得到更高阶的函数名juxe 因此,juxe的行为如下 ((juxe :a a :b b :c c) x) => {:a (a x) :b (b x) :c (c x)} 此函数是否有用 关于这个问题的一些背景想法。我认为Culjure中有三种高阶函数: 类型1:高阶模板函数 map、filter、reduce、t

在一些函数式编程书籍中,他们将tuple定义为[abc]形式,将entity定义为{:ax:bycz}形式

如果我们把
juxt
中的
t
作为元组的概念,我们可以用
e
作为实体的概念,得到更高阶的函数名
juxe

因此,juxe的行为如下

((juxe :a a :b b :c c) x) => {:a (a x) :b (b x) :c (c x)}
此函数是否有用

关于这个问题的一些背景想法。我认为Culjure中有三种高阶函数:

  • 类型1:高阶模板函数
    map、filter、reduce、take n、group by
  • 类型2:高阶装饰功能
    partial,comp,juxt
  • 类型3:
    #(…%1%2)
我通常使用类型3来实现类型2也可以完成的许多事情,因为我觉得类型3的可读性更好。然而,我觉得类型2的功能确实扩展了我的想象力,对我来说,这才是它们的真正价值所在

另外,最近发布的datomic查询现在支持返回一组实体。最初它只能返回一组元组

(defn juxe [& kf-pairs]
  (let [pairs (partition 2 kf-pairs)
        [ks fs] (apply mapv vector pairs)]
    (fn [x] (zipmap ks (map #(% x) fs)))))
比如说,

=> ((juxe :a inc :b dec :c -) 99)
{:a 100, :b 98, :c -99}

我会检查clojureverse中常见的util库嫌疑犯。如果有人认为它有用。如果它对你有用,为什么不写下来并使用它呢?但我投了接近票。给出了应用于映射的序列函数的几种翻译。您的函数不在其中,因为它还处理将函数集合应用于常量数据的过程。