В ABViewer поддержаны примерно половина LISP команд (более 50), включая рекурсивные функции и функции, которые принимают функцию как аргумент. Если Вы знакомы с LISP, то определяя свои функции можете значительно расширить возможности ABViewer. Для отладки программ LISP в ABViewer используется встроенный отладчик, который доступен на вкладке Дополнительно > панель Lisp > команда Lisp Debugger.
В дистрибутив программы входят два файла, которые демонстрируют добавление новых LISP функций: functiongraph.lsp и sqr.lsp. После установки программы примеры помещаются в директорию c:\Users\USER_NAME\Documents\ABViewer 11\Demos\Lisp\...
functiongraph.lsp
Добавляет функцию draw-graph для построения графиков.
(defun draw-line (p1 p2) (command "_line" p1 p2 ""))
(defun square (x) (* x x))
(defun rational (x) (/ 1 x))
(defun draw-graph (min max step f) (setq x min) (setq p (list x (f x))) (while (<= x max) (draw-line p (setq p (list x (f x)))) (setq x (+ x step)))) |
Для вызова функции draw-graph в командной строке введите:
(load "С:\Users\USER_NAME\Documents\ABViewer 11\Demos\Lisp\functiongraph.lsp") |
Загружает файл functiongraph.lsp в текущий файл |
(draw-graph -10 10 0.5 square) |
Строит график функции y=x2 |
(draw-graph -10 10 0.5 sin) |
Строит график функции y=sinx |
(draw-graph -10 10 0.5 cos) |
Строит график функции y=cosx |
(draw-graph -10 10 0.5 atan) |
Строит график функции y=arctgx |
Результат выполнения команды:
Command: (draw-graph -10 10 0.5 square)
sqr.lsp
Добавляет функцию SQR для построения квадрата.
(defun SQR (/ pt1 pt2 pt3 pt4 len ang) (setq pt1 (getpoint "First corner: ")) (setq pt2 (getpoint "Length of one side: ")) (setq len (distance pt1 pt2)) (setq ang (angle pt1 pt2)) (setq pt3 (polar pt2 (+ ang (/ PI 2.0)) len)) (setq pt4 (polar pt3 (+ ang PI) len)) (command "_PLINE" pt1 pt2 pt3 pt4 pt1 "") ) |
Пример использования:
(load "С:\Users\USER_NAME\Documents\ABViewer 11\Demos\Lisp\sqr.lsp") |
Загружает файл sqr.lsp в текущий файл |
(sqr) |
Запрашивает у пользователя две точки, расстояние между которыми будет являться стороной квадрата. |
Результат выполнения команд:
Command: (sqr)
First corner: (0,0)
Length of one side: (10,5) //вместо длины введены координаты второй точки
Перейти на страницу ABViewer