PC-LISP es una implementación del dialecto Franz Lisp de Peter Ashwood-Smith.
La versión 2.11 se publicó el 15 de mayo de 1986. Se puede descargar una versión actual desde el enlace externo a continuación.
Actualmente, PC-LISP se ha adaptado a Linux, Mac y Windows de 32 y 64 bits.
Tenga en cuenta que el dialecto de Franz LISP fue el sucesor inmediato y portátil de la versión ITS de Maclisp y es quizás lo más parecido al LISP en el libro de Steven Levy Hackers, ya que es práctico de operar. PC-LISP funciona bien en emuladores de DOS y en versiones modernas de Windows. Debido a que PC-LISP implementa Franz LISP, es un predecesor con alcance dinámico del Common Lisp moderno . Por lo tanto, esta es una implementación históricamente importante.
Ejemplo
La sesión ejecuta el siguiente código que demuestra el alcance dinámico en Franz LISP. Tenga en cuenta que PC-LISP no implementa la let
forma especial que Emacs Lisp proporciona para las variables locales. En cambio, todas las variables son lo que un lenguaje basado en ALGOL llamaría "global". El primer dialecto de Lisp en incorporar reglas de alcance ALGOL (llamado alcance léxico ) fue Scheme, aunque el lenguaje Common Lisp también agregó esta característica.
;; Demostración del 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 (el mío es tuyo ) ( princ "* El mío es -" ) (el princ. mío ) ( princ "\ n" ) ( princ "* El tuyo es -" ) (el princ. tuyo ) ( princ "\ n " ));; anular los símbolos ( defun nolocals () ( setq mine "He configurado el mío en un nuevo valor" ) ( setq tuyo "He configurado el tuyo en un nuevo valor" ) ( dosomething mío tuyo ))( defun main () ;; define dos símbolos ( setq mine myglobal ) ( setq yours yourglobal ) ;; imprímalos ( princ "llamando a dosomething \ n" ) ( dosomething mine tuyo ) ( princ "llamando a nolocals \ n" ) ( nolocals ) ( princ "llamando a dosomething otra vez \ n" ) ( dosomething mine tuyo ))
Otro ejemplo que muestra el uso de comillas inversas 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 respeto ; a la variable X. Tomamos la expresión en forma de prefijo lisp estándar y will ; utilice 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" ) ( salir ) ]