Pregunta

Me puede entender cómo crear y pensar en las pistas de esquí y el cálculo BCKW, pero nunca soy capaz de encontrar usos prácticos. Tal vez no estoy buscando con suficiente profundidad? Es decir, me pregunto si (un ejemplo sólo por favor, no estoy dando a entender que esto es cierto) el uso de Java Servlets S extensamente y generadores de Python son un ejemplo de BCW y yo soy simplemente incapaz de ver a través del bosque de árboles?

¿Fue útil?

Solución

En Haskell, están todas partes !

  • B es <$>
  • C es flip
  • K es pure
  • es id
  • S es <*>
  • W es join

Desde el punto de vista de Haskell, medios <$> "hacen en un contexto".

  • medios (+2) <$> (*3) añaden dos después de multiplicar por tres .
  • medios (+2) <$> [1,2,3] añaden dos a cada elemento de la lista .
  • medios (+2) <$> (read . getLine) añaden dos a el número que acabo de leer .
  • medios (+2) <$> someParser añaden dos a el número que se acaba de analizar .

Las cosas que tienen un contexto se llaman funtores . Todos sus Python / C ++ / Java iteradores son sólo extrañas versiones de dentro a fuera de funtores.

Otra conexión: la S y K combinator juntos son Turing-completo. En Haskell, pure y <*> forman juntos un funtor aplicativo.

Por supuesto, la comprensión de cómo los otros combinadores encajan requerirá aprender Haskell. Pero este ejemplo muestra cómo combinadores están tan arraigada en el idioma.

Otros consejos

La estación de esquí y BCKW cálculos estar al margen del cálculo lambda (que tiene aplicaciones muy conocidas en concepto de programación funcional), porque están en libre de punto de forma . Ver también tácita de programación . Ellos forman la base de la comprensión de cómo construir programas funcionales sin argumentos con nombre.

Vemos aplicaciones de la misma en determinados idiomas (por ejemplo, Joy y gato ). Una vez publicado en Lambda-the-Ultimate.org sobre la relación de SK cálculo para gato y alegría.

Por lo que su valor:. BCKW y los cálculos de esquí (SK) o son prácticamente idénticos, pero la base BCKW ha caído fuera de moda

A pesar de lambda y el cálculo SKI no reflejan los sistemas de entrada y salida de la mayoría de los lenguajes de programación (tales como gráficos, conexiones de red, o incluso podría decirse de entrada y salida estándar), la programación informática práctica manera se estructura corresponde a Lambda (y por lo tanto, de esquí y BCKW), tales como la idea de la repetición y de alguna manera la forma en que las funciones se llaman. Una gran cantidad de estos lenguajes de programación tienen abstracciones lambda para su uso como funciones.

Se trata de control.

Tal vez comenzar en un nivel inferior. Un sistema aplicativo es sólo un sistema donde los objetos se pueden aplicar a otros objetos. Un ejemplo sencillo de un sistema aplicativo es bash.     ls | más Uno podría suponer que están en algún ambiente, y que estos medios hacen ls sobre el medio ambiente, a continuación, hacer más. En la notación aplicativo esto es     más @ (ls @ medio ambiente) Sin embargo, se podría hacer cosas más complicadas como     ls | grep patrón | más Así que ahora en notación aplicativo esto es     más @ ((grep @ patrón) @ (ls @ entorno)). Aviso grep @ patrón. Grep se aplica a un patrón, que devuelva el programa para que coincida con el patrón en el resultado de ls. Este es el punto de aplicación, para aplicar un programa de argumentos, la creación de nuevos programas de los programas de "atómicas" (también conocido como incorporadas). Sin embargo, no podemos hacer demasiado la programación con sólo la aplicación primitivo o órdenes internas. Necesitamos una manera de estructurar nuestra entrada y la aplicación de nuestros primitivos a nuestra entrada.

Aquí es donde entra en juego lambda. Utilizando uno lambda puede generalizar el     (Grep @ patrón) Para la aplicación de grep a cualquier entrada,     (Grep @ X) Sin embargo, debemos tener una manera de conseguir la entrada a grep. Así que suelen utilizar las funciones.     f (X) = grep @ X El proceso anterior se llama abstrayendo el argumento. Pero no hay ninguna razón para pensar en el nombre f de ser especial, por lo que tenemos una sintaxis para ello:     lambda X. grep X @ Entonces lambda X. grep @ X, puede ser aplicada a una entrada, y la entrada será sustituido en el cuerpo y evaluado. Sin embargo, la sustitución puede causar problemas, variables ligadas pueden ser molestos para implementar en una máquina. S-K-I (o B, C, K, W) da una manera de hacer cosas lambda sin sustitución, y en lugar de simplemente intercambiando torno a las aplicaciones.

En resumen, la aplicación es lo que se trata todo esto. Es muy conveniente a la razón en el ámbito de la aplicación de un programa para algo (posiblemente otro programa). Cálculo lambda da una manera de estructurar la entrada y la aplicación de los programas a los argumentos. SKI da una manera de hacer lambda sin tener que explícitamente sustituto.

Hay que señalar que la reducción de esquí es inherentemente lento, por lo que puede necesitar ser hecho en un verdadero uso del mundo de esquí para la aplicación estructura de cierta consideración. De hecho, los argumentos pueden ahora se han evaluado completamente, y puede ser una aplicación parcial también. Se puede evitar esto con una teoría de tipos, y sólo la evaluación de un programa en su entrada si el programa se encuentra en la posición de la cabeza de la aplicación. Es decir, si uno escribe con términos lambda cerrados, traducidos a esquiar, Entonces sí p @ arg1 @ .... Debería ser el caso de que si p es un programa primitivo, a continuación, la reescritura ha completado, y así todos sus argumentos son 1) disponibles, 2) completamente evaluado. Sin embargo, no he probado esto, y puede que no sea cierto con una teoría suficientemente tipo fuerte ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top