Translate

sábado, 3 de agosto de 2019

Componiendo funciones con Factor


La composición de funciones es un concepto muy importante permite dividir las funciones en funciones más pequeñas y comenzar con la entrada, pásela a través de una serie de funciones y obtener una salida de esta manera la salida de una función es la entrada a la siguiente función y así sustantivamente hasta obtener la salida. Por lo tanto cada función es pequeña y enfocada. Se resuelve problemas creando y conectando bloques de código.

Veamos un ejemplo pero primero JavaScript :

ar x = f(42);
var y = g(x);
return h(y);

o más resumido:

return h(g(f(42)));

En factor sería :

42 f g h

Sin nombres de variables y sin paréntesis, puntos o cualquier otro signo de puntuación para indicar la composición de la función. Se da a entender que el resultado de llamar a una función (llamada word o "palabra" en Factor) . Factor maneja esto automáticamente utilizando una pila, que es simplemente un contenedor que contiene valores. Una palabra toman su entrada de la pila y empujan su resultado a la pila, que luego es operada por la siguiente palabra.

Observe también que las palabras f g h se llaman en el mismo orden en que las leemos, de izquierda a derecha.

Esta llamada se puede ver como el pipe operator de Elixir  :

other_function(2) |> new_function() |> baz() |> bar() |> foo()

o el pipe operator de linux donde la salida de una operación es la entrada para otra, podemos hacer :

$ history | grep "apt"

En la versión de JavaScript, f es una función, y los paréntesis en f (42) indican que se aplica f al valor 42. Esto hace que JavaScript sea un lenguaje aplicativo. La mayoría de los otros lenguajes, como Java, Ruby, Python, Clojure, Scala, Haskell y Erlang, son aplicativos.

Factor es un lenguaje concatenante porque en lugar de aplicar funciones (o palabras), las concatena, simplemente escribiéndolas una tras otra.

La composición de funciones es la forma predeterminada de tratar una expresión como f g h. Otros lenguajes concatenativos incluyen Forth, Joy, PostScript, Cat, Om, Retro y Kitten. Si está familiarizado con Forth o Joy, notará algunas similitudes en Factor.

En lugar de escribir :

          wrapWordsAsList (capitalize (strip (text)))

puedes escribir :
       
          text strip capitalize wrapWordsAsList

Es una hermosa expresión!!!

Dejo link: https://factorcode.org/