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 Икс) (пер ,ты)))))		 (т (принц "ОШИБКА") (выход)]

Рекомендации

внешняя ссылка