programacion paradigmas paradigma orientada objetos los importancia imperativa funcional declarativo declarativa caracteristicas haskell language-agnostic functional-programming j paradigms

haskell - paradigmas - programacion imperativa y declarativa



¿Cómo se clasifican J/K/APL en términos de paradigmas comunes? (2)

J está relacionado con el tipo de programación funcional (a veces conocida como programación de nivel de función, en oposición al nivel de valor) defendida por John Backus, quien es probablemente mejor conocido como el inventor de Fortran, pero pasó la última parte de su carrera tratando de Aleje la programación del estilo usado por Fortran.

En su conferencia del Premio Turing titulada "¿Se puede liberar la programación del estilo de von Neumann?" Backus presentó un resumen de sus ideas, que experimentó en sus idiomas de FP y FL . Esos fueron inspirados en gran parte por el APL de Ken Iverson, y Iverson a su vez tomó prestado de los idiomas de Backus cuando desarrolló J.

La idea clave detrás de estos, que se expandió y desarrolló como un paradigma a medida que la familia lingüística creció, fue la formación de un álgebra de programación . Usando estas herramientas algebraicas, un programador podría derivar o calcular un programa correcto para resolver un problema combinando funciones estándar de orden superior de acuerdo con reglas matemáticas bien conocidas. Del resumen de la conferencia anterior:

Asociado con el estilo funcional de la programación hay un álgebra de programas cuyas variables se extienden a lo largo de los programas y cuyas operaciones combinan formas. Este álgebra se puede usar para transformar programas y para resolver ecuaciones cuyas "incógnitas" son programas de la misma manera en que se transforman las ecuaciones en el álgebra de escuela secundaria. Estas transformaciones están dadas por leyes algebraicas y se llevan a cabo en el mismo idioma en que se escriben los programas. Las formas combinadas se eligen no solo por su poder de programación sino también por el poder de sus leyes algebraicas asociadas. Los teoremas generales del álgebra dan el comportamiento detallado y las condiciones de terminación para grandes clases de programas.

Aunque no parece haber muchas investigaciones recientes que utilicen la notación de esta familia de idiomas, las ideas clave han visto un desarrollo reciente en otros lenguajes funcionales. Richard Bird y Lambert Meertens trabajaron en un formalismo relacionado para la manipulación algebraica y la derivación de los programas y los datos en los que operan; esto se conoce como el formalismo de Bird-Meertens o, informalmente, Squiggol .

Bird y Philip Wadler más tarde escribieron un texto, "Introducción a la programación funcional", que introdujo a los estudiantes a la programación funcional más conocida de "nivel de valor" basada en el cálculo lambda. Originalmente usó el lenguaje de programación Miranda , un precursor de Haskell , pero en su segunda edición se tradujo para usar Haskell . Menciono esto porque Erik Meijer, Maarten Fokkinga y Ross Paterson usaron las funciones de ejemplo en el texto como ejemplos motivadores en su conocido documento "Programación funcional con bananas, lentes, sobres y alambre de púas" , donde extienden el pájaro. -Leer al formalismo, dale una base en la teoría de categorías y muestra cómo la solución a cada uno de los ejemplos se puede calcular según las leyes del formalismo y los esquemas de recursión capturados por sus funciones de orden superior.

Estas ideas se han arraigado en Haskell, y allí se puede encontrar un estilo de programación conocido como "libre de puntos" que se parece mucho a la programación de FP . Evita las variables nombradas y crea una nueva función puramente por la composición de otras funciones. La mayor parte del lenguaje no está optimizado para este uso, por lo que muchas funciones son difíciles de crear en un estilo sin puntos utilizando solo las bibliotecas estándar, pero hay bibliotecas alternativas que ofrecen más funciones de combinador de estilo Squiggol disponibles.

El estilo algebraico de los programas de construcción, gracias a su naturaleza matemática, es susceptible de análisis y transformación de alto nivel por compiladores sofisticados. Esto ha llevado a desarrollos en las optimizaciones de "Fusión" o "Deforestación" en compiladores de lenguaje funcional que permiten que los algoritmos expresados ​​en este estilo se reduzcan a bucles de código de máquina altamente eficientes sin todos los datos de basura y bucles redundantes que requeriría una traducción más ingenua. A principios de este año, se presentó un marco para la fusión de flujo generalizado que mostraba resultados muy prácticos de este estilo de programación.

Esperemos que este fondo le brinde una mejor idea de lo que el artículo de Wikipedia estaba hablando y cómo funciona el paradigma subyacente.

Acabo de empezar a aprender J, lo cual es muy interesante, pero me preguntaba qué tipo de lenguaje es exactamente, en relación con los paradigmas y clasificaciones comunes. Por ejemplo, podría decir que F # es un lenguaje fuertemente tipado, principalmente funcional (que admite OO y programación de procedimientos, pero que se considera "funcional") que pertenece a la familia ML. Para J, sin embargo, no pude encontrar mucho sobre cómo clasificarlo "convencionalmente", o encontrar algo en Stackoverflow que confirme que es un lenguaje de programación funcional. Wikipedia dice que "es un lenguaje de programación matricial muy conciso", "es compatible con la programación de nivel de función" y "no es un lenguaje de programación de Von Neumann", ninguno de los cuales es más útil.

Tengo un par de preguntas:

  1. ¿A qué paradigma principal (procedimental, OO, funcional, lógico) corresponde J / K / APL? Si su paradigma es solo "programación de matrices", ¿a qué paradigma cae o es más similar?

  2. ¿Qué lenguajes de programación conocidos son J / K / APL más similares a? Por ejemplo, supongo que son como Lisp, ya que operan en arreglos (listas) y tienen una sintaxis de coma mínima, no.

Solo estoy tratando de clasificar estos idiomas en mi cabeza de acuerdo con lo que ya sé. Gracias.


Mientras que otras etiquetas también podrían aplicarse (como en otros idiomas), J es ciertamente un lenguaje funcional. Tiene la mayoría de los atributos principales atribuidos a los lenguajes funcionales, como las funciones que son ''ciudadanos de primera clase'', funciones de orden superior, etc. Además, si significa algo para usted, he leído artículos en los que los mismos creadores del lenguaje describieron el lenguaje como ''funcional.''

También podría decir que es un lenguaje de programación de matrices, ya que todas las funciones operan en matrices frente a elementos individuales.

Creo que la respuesta corta que estás buscando es que J es un lenguaje de programación de matriz funcional. También puede lanzar otros descriptores, como no tipificados estáticamente, etc.

En cuanto a sus preguntas numeradas:

  1. Programación funcional y matricial.
  2. En lo que respecta a la programación de matrices, no son similares a ningún otro lenguaje conocido; más bien están en su propia categoría de ''lenguajes de programación matricial''. En cuanto a los aspectos funcionales, estarían en la categoría funcional.