Barry Jay en su libro hace algunas afirmaciones audaces, básicamente al decir que, en el centro de un programa, todo es atómico o compuesto. Luego, las cosas se pueden iterar, filtrar y actualizar fácilmente, simplemente navegando por esta relación de composición.
¿Es esta una nueva frontera en Ciencias de la Computación para lenguajes de computadora, o simplemente volvemos a LISP?
fl.formal-languages
ojo de halcón
fuente
fuente
Respuestas:
Uno de los principales beneficios del trabajo reciente de Jay es que reduce el código repetitivo que uno necesita escribir para atravesar las estructuras de datos para realizar operaciones como el mapa . El cálculo del patrón le permite a uno escribir el código transversal una vez para todas las estructuras de datos y hacer que sea aplicable a su propia estructura de datos. Esto ciertamente reduce la cantidad de código requerido, pero no le permite escribir ningún programa que de otro modo no podría escribir. Ciertamente hay muchas ideas interesantes en el trabajo, pero queda por demostrar que realmente funciona.
fuente
No estoy familiarizado con el trabajo reciente de Barry Jay, pero su trabajo anterior incluye cosas que no puedes hacer en Lisp, porque los tipos dan información adicional.
Por ejemplo, suponga que desea definir el tamaño de una estructura de datos Lisp. Es 1 para un átomo, y n para una lista de n átomos, y más generalmente tamaño (x) + tamaño (y) para
(cons x y)
.Ahora agregue tipos en la mezcla. El tamaño de una lista sería su longitud. ¿Cuál es el tamaño de una lista de listas de átomos? Si considera esta estructura de datos como una lista (cuyos elementos resultan ser listas de átomos), la respuesta es la longitud de la lista. Si considera que esta estructura de datos contiene átomos que están almacenados en una lista de listas, la respuesta es la suma de las longitudes de las listas de elementos.
Los tipos le permiten distinguir entre estas dos vistas (formas) de los datos sin procesar. Necesita un sistema de tipos que le permita discriminar entre (Lista) (Lista Atom) y (Lista Lista) (Atom). La implementación más común de esta distinción es con clases de tipo (como en Haskell).
fuente