martes, 22 de febrero de 2022

LAMBDA recursiva

Uno de los aspectos más relevantes de la nueva función LAMBDA es la posibilidad de referirse a sí misma, esto es, de ser una función recursiva.
Esto puede parecer baladí, pero abre un sinfín de posibilidades... La posibilidad de poder trabajar con el resultado previo obtenido por la misma función para aplicar de nuevo la transformación necesitada, es sin duda alguna, lo más parecido a los bucles en programación.

Hay muchas publicaciones con ejemplos de esta recursividad empleando LAMBDA... pero uno especialmente claro es el que publicó Leila Gharani (desconozco si fué ella la autora original).
Ella planteaba una fórmula para realizar un reemplazamiento masivo basado en una lista de sustituciones.
br/>
Probando las nuevas funciones LAMBDA dí con una solución alternativa sin hacer uso de una función sobre sí misma... apoyándome en la función REDUCE que recuerda que se apoyo en el resultado transformado previo para aplicar dicha transformación... esto es, trabaja sobre datos secuenciales acumulados.
Mi función es:
=REDUCE(B13;
BYROW(B3:C9;LAMBDA(a;INDICE(a;0;1)&"|"&INDICE(a;0;2)));
LAMBDA(acum;dato;SUSTITUIR(acum;IZQUIERDA(dato;ENCONTRAR("|";dato)-1);DERECHA(dato;LARGO(dato)-ENCONTRAR("|";dato)))))
LAMBDA recursiva
Fíjate en el uso de BYROW para obtener un vector que unifica o concatena el dato a reemplazar con el dato por el que se desea sustituir... para luego, en el contexto de 'acumulado/secuencia' de la función REDUCE emplear una función LAMBDA que provoca la transformación línea a línea
:OOO

Un punto a favor, o no... jeje, es que esta fórmula no es necesaria incrustarla en el Administrador de nombres si no queremos.. aspecto importante a mi modo de ver ;-)

Por cierto, la función que planteaba Leila era:
=LAMBDA(txt;esto;por;SI(esto="";txt;SUST(SUSTITUIR(txt;esto;por);DESREF(esto;1;0);DESREF(por;1;0))))
Es fundamental anticipar como llamaremos a nuestra función (SUST en mi caso), ya que se hace necesario emplearla en el desarrollo inicial.
Lo recomendable es escribir la fórmula tal cual en una celda cualquiera (no te preocupes si te devuelve un error.. es normal, esta función solo opera correctamente bajo el paragüas de los nombres definidos).

Cuando hayas acabado de escribirla copiala y accede al Administrador de nombres definidos y crea uno nuevo con el nombre 'SUST', incluyendo en el campo de 'Se refiere a' la fórmula copiada.

Ya puedes hacer uso de la función...
LAMBDA recursiva

Observa como en el resultado obtenido se han producido todos los reemplazamientos dados en la matriz B3:C9.
En realidad se mantiene el ciclo de sustituciones mientras encuentre celdas no vacías... ;-)

Profundizaremos más sobre este interesante comportamiento!!

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.