¿Por qué la función principal y la función de interrupción no pueden llamar a la misma función?
La función de servicio de interrupción ISR no es llamada por ninguna función, y se puede considerar que ISR y main ocurren en paralelo.
Programación funcional:
La programación funcional es un paradigma de programación que trata las operaciones de una computadora como el cálculo de funciones. La base más importante de los lenguajes de programación funcionales es el cálculo lambda. Además, la función de cálculo lambda puede aceptar funciones como entrada (parámetros) y salida (valor de retorno). En comparación con la programación imperativa, la programación funcional enfatiza que el cálculo de funciones es más importante que la ejecución de instrucciones. En comparación con la programación de procedimientos, en la programación funcional, los cálculos de funciones se pueden llamar en cualquier momento.
En el artículo frecuentemente citado "Por qué es importante la programación funcional" (ver Recursos), el autor John Hughes muestra que la modularidad es la clave para una programación exitosa y que la programación funcional puede mejorar en gran medida la modularidad. En programación funcional, los programadores tienen un marco natural para desarrollar módulos más pequeños, simples y generales y luego combinarlos. Algunas características básicas de la programación funcional incluyen:
Admite cierres y funciones de orden superior, y admite evaluación diferida. Utilice la recursividad como mecanismo para controlar el flujo. Transparencia de referencia mejorada. No hay efectos secundarios. Me centraré en el uso de cierres y funciones de orden superior en el lenguaje Java, pero primero daré una descripción general de todas las características enumeradas anteriormente.
Cierres y funciones de orden superior:
La programación funcional admite funciones como objetos de primera clase, a veces llamados cierres u objetos funtores. Básicamente, un cierre es un objeto que actúa como una función y puede manipularse como un objeto. De manera similar, el lenguaje FP admite funciones de orden superior. Una función de orden superior puede tomar otra función (indirectamente, con una expresión) como parámetro de entrada y, en algunos casos, incluso devuelve una función como parámetro de salida. Estas dos estructuras combinadas permiten la programación modular de una manera elegante, que es el mayor beneficio de usar FP.
Cálculo diferido:
Además de los conceptos de funciones de orden superior y functores (o cierres), FP también introduce el concepto de cálculo diferido. En la evaluación diferida, la expresión no se evalúa inmediatamente cuando se vincula a la variable, sino que se evalúa cuando el evaluador necesita producir el valor de la expresión. La evaluación retrasada le permite escribir funciones que potencialmente pueden generar resultados infinitos. Debido a que no se calculan más valores de los que requiere el resto del programa, no hay necesidad de preocuparse por errores de falta de memoria causados por cálculos infinitos. Un ejemplo de evaluación diferida es una función que genera una lista de Fibonacci infinita, pero calcular el enésimo número de Fibonacci equivale simplemente a extraer un elemento de una posible lista infinita.
Recursividad:
Otra característica de FP es el uso de la recursividad como mecanismo para controlar el flujo. Por ejemplo, Lisp maneja listas por definición con sublistas después del elemento principal, una notación que se presta naturalmente para recurrir a sublistas más pequeñas.
Transparencia referencial:
Los programas funcionales generalmente también imponen transparencia referencial, es decir, si se proporciona la misma entrada, la función siempre devuelve el mismo resultado. Es decir, el valor de la expresión no depende del estado global que pueda cambiar el valor. Esto le permite inferir formalmente el comportamiento del programa porque el significado de una expresión depende sólo de sus subexpresiones y no del orden de evaluación o de los efectos secundarios de otras expresiones. Esto ayuda a verificar la corrección, simplificar el algoritmo e incluso ayudar a descubrir formas de optimizarlo.
Efectos secundarios:
Los efectos secundarios son construcciones del lenguaje que modifican el estado del sistema. Debido a que el lenguaje FP no contiene declaraciones de asignación, los valores de las variables nunca cambian una vez asignados. Además, llamar a la función solo calcula el resultado; no se producen otros efectos. Por tanto, los lenguajes FP no tienen efectos secundarios