2010-12-06 23 views
30

¿Cuál es el lenguaje de programación funcional más minimalista?¿Cuál es el lenguaje de programación funcional más mínimo?

+5

Para los votantes cercanos, el "lenguaje de programación funcional mínimo" parece una pregunta legítima. @Ishihara, su primera pregunta acerca de las desventajas podría considerarse subjetiva y podría provocar una discusión: se desalientan preguntas como esa –

+0

@Paul: Sí, es una pregunta válida, pero solo si es la única pregunta. * ¿Puede alguien decirme el lenguaje de programación funcional más mínimo? * No coincide con el título de la pregunta ... actualmente la "pregunta" es una especie de mezcla extraña ... –

+0

Scheme es un lenguaje de programación funcional muy simple. Lo básico se puede recoger muy rápidamente. No estoy seguro si es el "más mínimo" sin embargo. – blizpasta

Respuesta

55

Depende de lo que usted quiera decir con un mínimo.

Para empezar, el antecesor de los lenguajes funcionales es, ante todo, lógica matemática. El uso computacional de ciertas lógicas vino después del hecho. En cierto sentido, muchos sistemas matemáticos (cuyos núcleos suelen ser bastante mínimos) podrían denominarse lenguajes funcionales. ¡Pero dudo que sea eso lo que buscas!

más conocido es Alonzo Church 's lambda calculus, de los cuales hay variantes y descendientes:

  • La forma más simple es lo que se llama el lambda sin tipo de cálculo; esto no contiene nada más que abstracciones lambda, sin restricciones en su uso. La creación de estructuras de datos que utilizan solo funciones anónimas se realiza con lo que se llama que codifica la iglesia y representa datos por operaciones fundamentales en él; el número 5 se convierte en "repetir algo 5 veces", y así sucesivamente.

  • Los lenguajes de la familia Lisp son poco más que cálculos lambda sin tipo, aumentados con valores atómicos, células cons y un puñado de otras cosas. Sospecho que Scheme es el más minimalista aquí, como si la memoria me sirve, fue creado primero como un lenguaje de enseñanza.

  • El propósito original del cálculo lambda, el de describir pruebas lógicas, falló cuando se demostró que la forma no tipificada era inconsistente, que es un término cortés para "le permite probar que lo falso es verdadero". (Curiosidades históricas: el documento que prueba esto, que era algo significativo en ese momento, lo hizo al escribir una prueba lógica que, en términos computacionales, ingresó en un ciclo infinito.) De todos modos, el uso como lógica fue recuperado por introduciendo tipeado cálculo lambda. Sin embargo, estos no suelen ser directamente útiles como lenguajes de programación, ya que ser lógicamente sólido hace que el lenguaje no sea completo.

  • Sin embargo, similar a cómo Lisps se deriva del cálculo lambda sin tipo, un cálculo lambda tipeado extendido con recursividad incorporada, tipos de datos algebraicos y algunas otras cosas le otorga la familia extendida de idiomas ML. Estos tienden a ser bastante mínimos en el corazón, con construcciones sintácticas que tienen traducciones directas a términos lambda en muchos casos. Además de los obvios dialectos ML, esto también incluye Haskell y algunos otros idiomas. Sin embargo, no conozco ningún lenguaje funcional escrito especialmente minimalista; un lenguaje así probablemente sufriría una mala usabilidad mucho peor que un lenguaje minimalista sin tipo.

En lo que a las variantes de cálculo lambda ir, el cálculo lambda sin tipo puro sin complicaciones añadidas es Turing completo y casi tan mínimo como usted puede conseguir!

Sin embargo, podría decirse que es más mínimo eliminar por completo el concepto de "variables"; de hecho, esto se hizo originalmente para simplificar pruebas meta-matemáticas sobre sistemas lógicos, si me sirve la memoria, y usar solo funciones llamadas combinators.Aquí tenemos:

  • Combinatory logic sí mismo, como originalmente inventado por Moses Schönfinkel y desarrollado ampliamente por Haskell Curry. Cada combinador se define por una regla de sustitución simple, por ejemplo Sxyz = xz(yz). Las letras minúsculas se utilizan como variables en esta definición, pero tenga en cuenta que la lógica combinatoria en sí no usa variables ni asigna nombres a nada en absoluto. La lógica combinatoria es mínima, desde luego, pero no demasiado amigable como lenguaje de programación. La más conocida es la base del combinador SK. S se define como en el ejemplo anterior; K es Kxy = x. ¡Esos dos combinadores por sí solos son suficientes para que sea completo! Esto es casi terriblemente mínimo.

  • Unlambda es un lenguaje basado en combinadores SK, que se extiende con unos pocos combinadores adicionales con propiedades especiales. Menos mínimo, pero te permite escribir "Hola mundo".

  • Incluso dos combinators son más de lo que necesita, sin embargo. Existen varias bases de un combinador; tal vez el más conocido es el iota Combinator, definida como ιx = xSK, que se utiliza en un lenguaje minimalista también llamado Iota

  • también de alguna nota se Lazy K, que se distingue de unlambda al no introducir combinadores adicionales, al no tener efectos secundarios, y el uso de evaluación perezosa. Básicamente, es el Haskell del mundo del lenguaje esotérico basado en el combinador. Es compatible tanto con la base SK, como con el combinador iota.

Cuál de los que te parece más "mínimo" es probablemente una cuestión de gusto.

+4

Debe guardar esta respuesta, en caso de que se elimine. :-( – ShreevatsaR

+0

¿Realmente Schönfinkel propuso una forma de lógica combinatoria? A menudo he visto la noción de currying atribuida a él, pero no esto. También he visto la noción de currying atribuida a Frege, pero nunca he verificado esa afirmación – dubiousjim

+1

@dubiousjim: curry fue atribuido a Schönfinkel por Curry, pero creo que es anterior a ambos (Frege suena plausible), haciendo de este un ejemplo inusualmente intrincado de la ley de Baez. Por su parte, la carrera de Schönfinkel fue corta y llena de infortunio; sobre el tema probablemente hubiera sido olvidado si Curry no lo hubiera encontrado después de haber inventado independientemente conceptos similares. * Reitero * vagamente, pero no puedo citar, que la base SK fue de hecho Schönfinkel, adoptada por Curry en lugar de su formulación original. –

4

Imagino que el "lenguaje de programación" mínimo funcional sería lambda calculus.

+4

O SKI combinator calculus. Unlambda es el lenguaje de programación real. – sastanin

+0

@jetxee: Buen punto. Olvidé esos. E incluso miré el sitio web de Unlambda hace dos días ... –

0

Un lenguaje de programación esotérico (también llamado esolang) es un lenguaje de programación diseñado para probar los límites del diseño de lenguaje de programación, como una prueba de concepto, como arte software, como una interfaz de pirateo para otro lenguaje (particularmente programación funcional o programación de lenguaje), o como una broma. El uso de esoterismo distingue estos lenguajes de los lenguajes de programación que los desarrolladores utilizan para escribir software. Por lo general, los creadores de esolang no pretenden que el lenguaje se use para la programación general, aunque algunas características esotéricas, como la sintaxis visoespacial, han inspirado aplicaciones prácticas en las artes. Tales idiomas son a menudo populares entre hackers y aficionados.

0

BrainF * ck es un lenguaje de programación simple y fácil de usar. Aquí hay un resumen rápido.

Imagine que tiene una gama casi infinita de cajas, cada una vacía. Afortunadamente, ¡no estás solo! Puedes avanzar y retroceder por la línea, poner cosas en ellas y sacarlas. Aunque es bastante básico, con tiempo suficiente puede hacer cualquier cosa: http://www.iwriteiam.nl/Ha_bf_inter.html. Aquí están los comandos.

+ | add one to currrent box 
- | take one from current box 
> | move one box to the right 
< | move one box to the left 
[] | loop 
. | print current value 
, | input current value 

otras cosas para mirar:

P" | BF simplificado

lenguaje f | reciente BF simplificado

http://www2.gvsu.edu/miljours/bf.html | cosas interesantes BF/introducción

https://www.esolangs.org/wiki/Language_list | lista de langs/variantes similares

Cuestiones relacionadas