PC-LISP es una implementación del dialecto Franz Lisp por Peter Ashwood-Smith. [ 1 ] [ 2 ] [ 3 ]
La versión 2.07 se publicó el 1 de febrero de 1986, [ 4 ] y la versión 3.00 se publicó el 1 de febrero de 1990. [ 1 ] Una versión actual está disponible a través de GitHub. [ 2 ]
Actualmente, PC-LISP se ejecuta en versiones de 32 y 64 bits de Linux , Mac , Windows , [ 2 ] y NetBSD . [ 5 ] Para NetBSD también existen puertos para AArch64 , ARMv5/6/7 , PowerPC , Motorola 68000 , SPARC/SPARC64 , Alpha y VAX . [ 5 ]
Cabe señalar que el dialecto Franz LISP fue el sucesor inmediato y portátil de la versión ITS de Maclisp [ 6 ] y es quizás lo más parecido al LISP del libro Hackers de Steven Levy que resulta práctico para operar.
PC-LISP está escrito principalmente en el lenguaje de programación C , con algunas partes ahora también escritas en Common Lisp . [ 2 ] Debido a que PC-LISP implementa Franz LISP, es un predecesor de ámbito dinámico del Common Lisp moderno .
Ejemplo
En esta sesión se ejecuta el siguiente código, que demuestra el alcance dinámico en Franz LISP. Cabe destacar que PC-LISP no implementa la letforma especial que Emacs Lisp proporciona para las variables locales. En cambio, todas las variables son lo que un lenguaje basado en ALGOL denominaría "globales". El primer dialecto de Lisp en incorporar las reglas de alcance de ALGOL (denominado alcance léxico ) fue Scheme, aunque el lenguaje Common Lisp también añadió esta característica.
;; Demostración de alcance dinámico;; Esta es una variable "global" ( setq myglobal "esta es mi variable global" );; Otra variable global ( setq yourglobal "esta es mi variable global" );; una función que imprime los símbolos ( defun dosomething ( mine yours ) ( princ " * Mine is - " ) ( princ mine ) ( princ "\n" ) ( princ " * Yours is - " ) ( princ yours ) ( princ "\n" ));; anular los símbolos ( defun nolocals () ( setq mine "He establecido el mío a un nuevo valor" ) ( setq yours "He establecido el tuyo a un nuevo valor" ) ( dosomething mine yours ))( defun main () ;; define dos símbolos ( setq mine myglobal ) ( setq yours yourglobal ) ;; imprímelos ( princ "llamando a dosomething\n" ) ( dosomething mine yours ) ( princ "llamando a nolocals\n" ) ( nolocals ) ( princ "llamando a dosomething de nuevo\n" ) ( dosomething mine yours ))Otro ejemplo que muestra el uso de las comillas invertidas y el poder de LISP. Este es un ejemplo de diferenciación.
; D(e,X) - ; Calculará la derivada simbólica de la expresión e con respecto a ; la variable X. Tomamos la expresión en forma de prefijo estándar de Lisp y utilizaremos ; las siguientes reglas de diferenciación. ; ; D(x) = 1 ; D(a) = 0 ; D(ln u) = D(u)/u ; D(u+v) = D(u)+D(v) ; D(uv) = D(u)-D(v) ; D(u*v) = D(u)*v + u*D(v) ; D(u/v) = D(u)*v + (u*D(v))/v^2 ; D(v^u) = (v^u)*(u*D(v)/v + D(u)*ln(v)) ; ( defun D ( e X &aux u v ) ( cond (( igual e X ) 1 ) (( átomo e ) 0 ) ( t ( setq u ( cadr e ) v ( caddr e )) ( caseq ( car e ) ( ln ` ( / , ( D u X ) , u )) ( + ` ( + , ( D u X ) , ( D v X ))) ( - ` ( - , ( D u X ) , ( D v X ))) ( * ` ( + ( * , ( D u X ) , v ) ( * , ( D v X ) , u ))) ( / ` ( - ( / , ( D u X ) , v ) ( / ( * , u , ( D v X )) ( ^ , v 2 )))) ( ^ ` ( * , e ( + (/ ( * , v , ( D u X )) , u ) ( * , ( D v X ) ( ln , u ))))) ( t ( princ "ERROR" ) ( exit ) ]Referencias
- 1 2 Ashwood-Smith, Peter (1 de febrero de 1990). "PC-LISP V3.00 (C) 1 de febrero de 1990 Peter Ashwood-Smith" . Universidad Carnegie Mellon - Escuela de Ciencias de la Computación . Recuperado el 14 de noviembre de 2024 .
- 1 2 3 4 "blakemcbride/PC-LISP" . 4 de agosto de 2020. Recuperado el 14 de noviembre de 2024 a través de GitHub.
- ↑ Ashwood-Smith, Peter (mayo de 1987). Van Deusen, Mary S. (ed.). "PC-LISP" . LISP Pointers . Vol. 1, n.º 1, págs. 51-52 . Consultado el 14 de noviembre de 2024 .
- ↑ Ashwood-Smith, Peter (20 de febrero de 1986). "GUÍA DEL INTÉRPRETE PC-LISP (V2.07)" . The Unix Heritage Society . Consultado el 14 de noviembre de 2024 .
- 1 2 "lang/pc-lisp - La colección de paquetes de NetBSD" . NetBSD . Consultado el 14 de noviembre de 2024 .
- ↑ Foderaro, John K.; Sklower, Keith L.; Layer, Kevin (junio de 1983). "FRANZ LISP". El manual de FRANZ LISP (PDF) . pág. 5 – vía GitHub.
Enlaces externos
- Familia de lenguajes de programación Lisp
- Herramientas de desarrollo descontinuadas