PC-LISP - PC-LISP
PC-LISP это реализация Ференц Лисп диалект Питера Эшвуда-Смита.
Версия 2.11 была выпущена 15 мая 1986 года. Текущая версия может быть загружена по внешней ссылке ниже.
В настоящее время PC-LISP перенесен на 32- и 64-разрядные версии Linux, Mac и Windows.
Обратите внимание, что диалект Franz LISP был непосредственным переносимым преемником ЭТО версия Маклисп и, пожалуй, самый близкий к LISP в Стивен Леви книга Хакеры как практично работать. PC-LISP хорошо работает в эмуляторах DOS и в современных версиях Windows. Поскольку PC-LISP реализует Franz LISP, он является предшественником современных Common Lisp. Следовательно, это исторически важная реализация.
Пример
В сеансе выполняется следующий код, демонстрирующий динамическое определение в Franz LISP. Обратите внимание, что PC-LISP не реализует позволять
особая форма, которая Emacs Lisp предусматривает локальные переменные. Вместо этого все переменные - это то, что АЛГОЛ -основанный язык назвал бы "глобальным". Первый диалект Лиспа, включающий правила области видимости АЛГОЛА (называемый лексическая область видимости ) был Схема Хотя Common Lisp язык также добавил эту функцию.
;; Демонстрация динамического определения объема;; Это «глобальная» переменная(setq myglobal "это моя глобальная переменная");; Еще одна глобальная переменная(setq ваш глобальный "это моя глобальная переменная");; функция, которая печатает символы(defun сделай что-нибудь (мой твой) (принц "* Моя -") (принц мой) (принц " п") (принц " * Твое - ") (принц твой) (принц " п"));; переопределить символы(defun нолокальные () (setq мой «Я установил новое значение») (setq твой "Я установил для вас новое значение") (сделай что-нибудь мой твой))(defun главный () ;; определить два символа (setq мой myglobal) (setq твой ваш глобальный) ;; распечатать их (принц "вызываю что-то n") (сделай что-нибудь мой твой) (принц "звонки нолокальчикам n") (нолокальные) (принц "снова вызываю что-то n") (сделай что-нибудь мой твой))
Еще один пример, показывающий использование обратных кавычек и возможности LISP. Это пример дифференциации.
; D (е, Х) -; Вычислит символьную производную выражения e относительно; переменной X. Мы берем выражение в стандартной форме префикса lisp и будем; используйте следующие правила дифференциации.;; D (х) = 1; D (а) = 0; D (ln u) = D (u) / u ; D (u + v) = D (u) + D (v); D (u-v) = 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) * (и * D (v) / v + D (u) * ln (v));(defun D(е Икс & aux ты v) (cond ((равный е Икс) 1) ((атом е) 0) (т (setq ты (кадр е) v (caddr е)) (caseq (машина е) (пер `(/ ,(D ты Икс) ,ты)) (+ `(+ ,(D ты Икс) ,(D v Икс))) (- `(- ,(D ты Икс) ,(D v Икс))) (* `(+ (* ,(D ты Икс) ,v) (* ,(D v Икс) ,ты))) (/ `(- (/ ,(D ты Икс) ,v) (/ (* ,ты ,(D v Икс)) (^ ,v 2)))) (^ `(* ,е (+ (/ (* ,v ,(D ты Икс)) ,ты) (* ,(D v Икс) (пер ,ты))))) (т (принц "ОШИБКА") (выход)]