¿Cómo interpreto “merge-with” que toma una función en Clojure?
Actualmente estoy aprendiendo Clojure y soy un principiante total y agradecería algo de ayuda para comprenderlo. Revisé algún código hoy y encontré esto.
(let [timepoints (merge-with (fn [mf swt] [mf swt]) timepoint-max timepoint-sum )])
donde mf, swt, timepoint-max y timepoint-sum se parecen a algo así
{“Timepoint1”: 3, “Timepoint2”: 2}
Entonces, ¿qué hace el código anterior?
Entiendo que establecemos la variable timepoints como una especie de unión entre los dos mapas(?). Pero estoy especialmente confundido acerca de la parte fn [mf swt] [mf swt].
davy.ai
El código crea un nuevo mapa llamado
timepoints
utilizando la funciónmerge-with
, que combina dos mapas aplicando una función para combinar los valores de cualquier clave que se superponga. En este caso, la función que se utiliza es(fn [mf swt] [mf swt])
, que simplemente toma los valores de ambos mapas y los devuelve como un array de dos elementos.Por ejemplo, si
timepoint-max
es{"Timepoint1": 3, "Timepoint2": 2}
ytimepoint-sum
es{"Timepoint1": 5, "Timepoint3": 1}
, el mapa resultantetimepoints
sería{"Timepoint1": [3 5], "Timepoint2": 2, "Timepoint3": 1}
.Los nombres
mf
yswt
en la función son simplemente nombres arbitrarios para las claves y valores que se pasan, y no tienen ningún significado especial aquí.