是否有反向映射功能?

Ann*_*nan 4 clojure

在clojure中,您可以将函数映射到值序列.是否有内置函数将单个值作为参数映射到一系列函数?

(map inc [1 2 3 4])
; -> (2 3 4 5)

(reverse-map [inc dec str] 1)
; -> (2 0 "1")

(reverse-map [str namespace name] :foo/bar/baz)
; -> (":foo/bar/baz" "foo/bar" "baz")
Run Code Online (Sandbox Code Playgroud)

Raf*_*ird 9

juxt有点类似.它需要许多函数并返回一个将其参数传递给每个函数并返回返回值向量的函数.所以:

> ((apply juxt [inc dec str]) 1)
[2 0 "1"]
Run Code Online (Sandbox Code Playgroud)

主要区别在于它创建了一个向量,当然是渴望(即不是懒惰).原始map创建了一个懒惰的序列.

juxt 也适用于具有多个参数的函数:

> ((apply juxt [* / -]) 6 2)
[12 3 4]
Run Code Online (Sandbox Code Playgroud)


sou*_*eck 5

不确定是否有,但实施起来相当容易:

(def reverse-map (fn [l value] (map #(% value) l)))
Run Code Online (Sandbox Code Playgroud)