Red de conocimiento informático - Conocimiento informático - ¿Cómo evaluar la raqueta de lenguaje de programación?

¿Cómo evaluar la raqueta de lenguaje de programación?

El nacimiento y el desarrollo de la raqueta

Una breve introducción al desarrollo de la raqueta. 1958, John McCarthy, el padre de la inteligencia artificial, inventó un lenguaje de procesamiento simbólico basado en el cálculo de lambda. LSIP (procesador de listas), su sintaxis se llama: expresión simbólica (E-Expresión). ? Lisp se basa en 7 funciones [Atom CAR CDR Cond Conts Eq Cita] y 2 tipos especiales [etiqueta Lambda]?

LISP nació originalmente para la investigación científica pura. No fue hasta que el estudiante de McCarthy, Stephen Russell, implementó la función eval en la máquina IBM 704 que comenzó la historia de LISP como lenguaje informático. En 1962, el primer compilador completo de Lisp nació en el MIT. Durante la próxima década más o menos, aparecieron varios dialectos LISP.

En 1975, nació el esquema. El esquema también nació en el MIT. Según el concepto de diseño minimalista, el esquema tiende a ser extremadamente elegante y se usa ampliamente en la comunidad educativa como un idioma de enseñanza de computadora.

En 1984, nació Common Lisp. En las décadas de 1970 y 1980, debido a demasiados dialectos de LISP, la comunidad se dividió, lo que no era propicio para el desarrollo general de LISP. A partir de 1981, bajo la operación de un grupo de piratas informáticos LISP, después de tres años de arduo trabajo para consolidar, se lanzó el LISP común en 1984. Dado que el concepto de diseño del esquema es diferente de otras versiones de LISP, aunque Common Lisp toma algunas características del esquema, no integra el esquema. Desde entonces, solo se han quedado dos dialectos de LISP: Lisp y esquema comunes.

Desde la década de 1990, debido al aumento de C ++, Java y C#, Lisp ha disminuido gradualmente. No fue sino hasta 2005 que, a medida que la informática científica calentó y dinámica los idiomas Javascript, Python y Ruby se hicieron populares, Lisp regresó gradualmente a la atención de las personas. Sin embargo, en el mundo educativo, la posición tradicional de Lisp, Python ha lanzado un cargo contra el esquema como un poderoso retador; Python para la enseñanza básica. Al mismo tiempo, la Universidad del Nordeste en los Estados Unidos estableció una estufa separada, y su principal esquema de Sistema de Computación Científica comenzó a desarrollarse rápidamente; En los últimos años, el lenguaje de la raqueta se ha convertido continuamente en el sitio web del lenguaje más activo del año, junto con el sitio web de Haskell. ?

Expresión simbólica S-Expression

Primero hablemos sobre la expresión S: ¿los elementos básicos de la expresión S son list y átomo?. Una lista está rodeada de paréntesis y puede contener cualquier número de elementos separados por espacios. ? Utiliza notación de prefijo y se usa como código y datos en LISP. ? Por ejemplo: 1+ 2* 3? Escrita como una expresión de prefijo es? (+ 1 (* 2 3)).

Ventajas: fácil de analizar, simple y puro, no es necesario considerar las prioridades, etc., que también es el requisito previo para realizar el código como datos;

Desventajas: no muy legible;

Funciones de orden superior

Las funciones de orden superior satisfacen al menos una de las siguientes condiciones:

Acepta una o más funciones como entrada; " >

emitir una función; ? En el cálculo de lambda sin tipo, todas las funciones son de orden superior? En la programación funcional, las funciones de orden superior que devuelven otra función se denominan funciones curritadas. El currying es la técnica de transformar una función que acepta múltiples parámetros en una función que acepta un solo parámetro (el primer parámetro de la función original) y devuelve una nueva función que acepta los parámetros restantes y devuelve un resultado. Por ejemplo, f (x, y) = x+y, si y = 1 se da, entonces se obtiene la función g (x) = x+1.

Expresión de lambda

Las expresiones lambda se usan en la raqueta para definir funciones anónimas. necesita usarse una vez como parámetro, use la expresión de lambda? Si desea usar expresiones Lambda para expresar recursión, debe introducir el "Y Combinator". . Luego aplique F a esta función X, y aún obtendrá X. Entonces x se llama punto fijo de f, es decir (y f) = (f (y f)).

Evaluación perezosa

Evaluación perezosa? . tiempo. Ver: ¿Evaluación perezosa y programación perezosa? ?

La evaluación perezosa es un concepto en la programación de computadoras, su propósito es minimizar el trabajo realizado por la computadora. El beneficio más importante de la evaluación perezosa es que puede construir un número ilimitado de tipos de datos. Cuando se usa una evaluación perezosa, la expresión no se evalúa inmediatamente después de que se une a la variable, sino que se evalúa cuando se recupera el valor. Una declaración como x: = expresión; De la expresión posterior en sí también se puede retrasar, y finalmente se calcula este valor de rápido crecimiento para generar un cierto símbolo que puede ver el árbol de dependencia. ?

Cierre

Cierre en informática, cierre (cierre) ¿Es la abreviatura del cierre léxico (cierre léxico), que es una función que hace referencia a variables libres? Una variable libre es un símbolo utilizado para representar una posición o posiciones en una expresión. La variable gratuita referenciada permanecerá con la función incluso después de que haya dejado el entorno en el que se creó. Al definir otra función dentro de una función (anidada), si la función interna hace referencia a las variables de la función externa, puede ocurrir un cierre. En tiempo de ejecución, una vez que se ejecuta la función exterior, se forma un cierre que contiene el código de la función interna y las referencias a las variables en la función externa requerida. La variable a la referencia se llama el valor de ascenso. Hay muchos artículos sobre los cierres de JavaScript en Internet.

Implementación de la raqueta de rabro rápido ]? ? (

(shorled? (¿Filtro? (Lambda? (x)? (>? X? (Primera matriz)))? Array))]) < /P>

(¿Sorteo rápido? '(1? 3? 2? 5? 3? 4? 5? 0? 9? 82? 4))

;;? (0? 1? 2? 3? 3? 4? 4? 5? 5? 9? 82)

A través de este ejemplo, puede sentir la potente capacidad de expresión del lenguaje de la raqueta basada en el operador Lambda . Alto el uso de funciones de orden, las expresiones y cierres de lambda es muy refinado en el tipo rápido descrito por Racket, que es un modo de pensamiento completamente diferente del lenguaje C basado en el modelo Von Neumann. Más tarde, a medida que aprenda más sobre Racket, intente escribir un intérprete