Red de conocimiento informático - Conocimiento informático - ¿Libros recomendados para aprender programación funcional?

¿Libros recomendados para aprender programación funcional?

1. Acerca de la elección de libros

1) Después de elegir un lenguaje de programación funcional para aprender, puede ir a algunas librerías y centros comerciales en línea (como JD.com y Dangdang). Según su propia situación, seleccione libros y materiales sobre el lenguaje de programación correspondiente.

2) Si comienzas con ideas y quieres aprender más profundamente, personalmente recomiendo comenzar con SICP ("Construcción e interpretación de programas informáticos"). El lenguaje Scheme es un refinamiento de ideas.

3) Si el usuario es un programador de Java, se recomienda echar un vistazo a Clojure, que es una herramienta de lenguaje muy productiva que se ejecuta en Lisp en la plataforma Java. Storm de Twitter se escribió usándolo. Clojure es ahora la estrella más brillante en el campo de los hackers. Lo más importante es que Clojure ha publicado muchos libros de texto en chino, para que puedas empezar a aprender. Por cierto, agregar SICP puede acelerar el progreso del aprendizaje. Si está centrado en el proyecto, puede elegir "Ejemplos clásicos de Clojure: Guía completa de programación funcional". Si no tiene una base básica, puede elegir "Living? Clojure" (los programadores antiguos pueden consultar la versión china). "Diversión en la programación de Clojure".

4) Si no estás haciendo un proyecto, pero solo quieres mejorar tus habilidades personales o ideas de programación, puedes elegir el lenguaje Haskell, que tiene mucha información, ya sean libros, videos, documentos. , etc.

2. En pocas palabras, la "programación funcional" es un "paradigma de programación", que es una metodología de cómo escribir programas.

Es un tipo de "programación estructurada". La idea principal es escribir el proceso de operación como una serie de llamadas a funciones anidadas tanto como sea posible. Por ejemplo, ahora existe una expresión matemática: (1? ?2)?*?3?-?4

En la programación procedimental tradicional, podría escribirse así: var?a?=? 1 ?2;

var?b?=?a?*?3;

var?c?=?b?-?4;

La programación de fórmulas de funciones requiere el uso de funciones. Podemos definir el proceso de operación como diferentes funciones y luego escribirlo de la siguiente manera: var?result?=?subtract(multiply(add(1,2),?3),?4) ;

Esto es programación funcional.

3. Características de la programación funcional:

La programación funcional tiene cinco características distintivas.

1) Las funciones son "ciudadanos de primera clase"

La llamada "primera clase" se refiere al hecho de que las funciones pueden estar en pie de igualdad con otros tipos de datos. asignado a otras variables, también se puede pasar como parámetro a otra función o utilizar como valor de retorno de otras funciones.

Por ejemplo, la variable de impresión en el siguiente código es una función que se puede utilizar como parámetro de otra función. var?print?=?function(i){?console.log(i);};

.forEach(print);

2), utilice solo "expresión", no hay necesidad de "declaración"

La "expresión" (expresión) es un proceso de operación simple, que siempre devuelve un valor; la "declaración" (declaración) realiza una determinada operación y no tiene valor de retorno. La programación funcional requiere el uso únicamente de expresiones, no declaraciones. En otras palabras, cada paso es una operación sencilla y tiene un valor de retorno.

La razón es que el motor de programación funcional está diseñado para manejar el cómputo desde el principio, sin considerar la lectura y escritura (E/S) del sistema. Las "declaraciones" pertenecen a operaciones de lectura y escritura en el sistema, por lo que están excluidas.

Por supuesto, en aplicaciones prácticas, es imposible no realizar E/S. Por lo tanto, durante el proceso de programación, la programación funcional solo requiere limitar las E/S al mínimo, evitar actividades innecesarias de lectura y escritura y mantener la simplicidad del proceso de cálculo.

3), sin "efectos secundarios"

El llamado "efecto secundario" se refiere a la interacción entre el interior y el exterior de la función (el caso más típico es modificar el valor de la variable global ), produciendo resultados distintos de operaciones.

La programación funcional enfatiza que no hay "efectos secundarios", lo que significa que la función debe permanecer independiente. Todas las funciones deben devolver un nuevo valor y no tener otras acciones, especialmente el valor de las variables externas. ser modificado.

4) No modificar el estado

Como se mencionó en el punto anterior, la programación funcional solo devuelve nuevos valores y no modifica las variables del sistema. Por lo tanto, no modificar variables también es una característica importante.

En otro tipo de lenguajes, las variables se suelen utilizar para guardar "estado". No modificar la variable significa que el estado no se puede guardar en la variable. La programación funcional utiliza parámetros para guardar el estado y el mejor ejemplo es la recursividad. El siguiente código es una función que ordena una cadena en orden inverso. Muestra cómo los diferentes parámetros determinan el "estado" de la operación. function?reverse(string)?{

 if(string.length?==?0)?{

  return?string;

 }?else? {

  return?reverse(string.substring(1,?string.length))? ?string.substring(0,?1);

 }

}

Debido al uso de la recursividad, los lenguajes funcionales se ejecutan relativamente lentamente, que es la razón principal por la que no se pueden promocionar en la industria durante mucho tiempo.

5), transparencia referencial

La transparencia referencial significa que el funcionamiento de la función no depende de variables externas o "estado", sino que solo depende de los parámetros de entrada Any As long. como los parámetros son los mismos, el valor de retorno obtenido por la función de referencia es siempre el mismo.

Con los puntos tercero y cuarto anteriores, esto queda claro. En otros tipos de lenguajes, el valor de retorno de una función a menudo está relacionado con el estado del sistema. En diferentes estados, el valor de retorno es diferente. Esto se denomina "opacidad de referencia", que no favorece la observación y comprensión del comportamiento del programa.