Articles of funcional programming

¿Qué es un buen marco de colecciones persistentes para usar en Java?

Por colecciones persistentes me refiero a colecciones como las de clojure. Por ejemplo, tengo una lista con los elementos (a, b, c). Con una lista normal, si agrego d, mi lista original tendrá (a, b, c, d) como sus elementos. Con una lista persistente, cuando llamo list.add (d), obtengo una nueva lista, sosteniendo (a, b, […]

Abortar temprano en un pliegue

¿Cuál es la mejor manera de terminar un plegado temprano? Como un ejemplo simplificado, imagina que quiero resumir los números en un Iterable , pero si encuentro algo que no estoy esperando (digamos un número impar) es posible que desee terminar. Esta es una primera aproximación def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = { nums.foldLeft (Some(0): Option[Int]) […]

¿Cuándo y por qué debería uno usar Funcionales Aplicativos en Scala?

Sé que Monad se puede express en Scala de la siguiente manera: trait Monad[F[_]] { def flatMap[A, B](f: A => F[B]): F[A] => F[B] } Veo por qué es útil. Por ejemplo, dadas dos funciones: getUserById(userId: Int): Option[User] = … getPhone(user: User): Option[Phone] = … Puedo escribir fácilmente la función getPhoneByUserId(userId: Int) ya que Option […]

Distinción entre las clases de tipos MonadPlus, Alternativa y Monoide?

Las clases de MonadPlus Haskell de biblioteca estándar MonadPlus , Alternative y Monoid proporcionan dos métodos con esencialmente la misma semántica: Un valor vacío: mzero , empty o mempty . Un operador a -> a -> a que une los valores en la clase de tipos juntos: mplus , o mappend . Los tres especifican […]

Usando O bien para procesar fallas en el código de Scala

Option mónada de Option es una gran manera expresiva de lidiar con cosas de algo o nada en Scala. Pero, ¿qué ocurre si uno necesita registrar un mensaje cuando ocurre “nada”? De acuerdo con la documentación de la API de Scala, El tipo Either se usa a menudo como alternativa a Scala. Opción donde Left […]

¿Cómo se representa un gráfico en Haskell?

Es bastante fácil representar un árbol o una lista en haskell usando tipos de datos algebraicos. ¿Pero cómo harías para representar typographically un gráfico? Parece que debes tener punteros. Supongo que podrías tener algo como type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours Y eso sería factible. […]

¿Cuál es la diferencia entre la clase de caso y la clase de Scala?

Busqué en Google para encontrar las diferencias entre una case class y una class . Todo el mundo menciona que cuando desee hacer una coincidencia de patrones en la clase, use la clase de casos. De lo contrario, use las clases y mencione algunas ventajas adicionales, como la anulación de los códigos hash y equals. […]

¿Cuál es la motivación para asignar la asignación de Scala a la Unidad en lugar del valor asignado?

¿Cuál es la motivación para asignar la asignación de Scala a la Unidad en lugar del valor asignado? Un patrón común en la progtwigción de E / S es hacer cosas como esta: while ((bytesRead = in.read(buffer)) != -1) { … Pero esto no es posible en Scala porque … bytesRead = in.read(buffer) .. devuelve […]

¿La progtwigción funcional reemplaza los patrones de diseño de GoF?

Desde que empecé a aprender F # y OCaml el año pasado, he leído una gran cantidad de artículos que insisten en que los patrones de diseño (especialmente en Java) son soluciones para las características que faltan en los idiomas imperativos. Un artículo que encontré hace un reclamo bastante fuerte : La mayoría de las […]