Ну, насчёт реализации -я пессимист.
Всё правильно. Хотели сделать нормальный ЛИСП, но ...
Просто забросили!!!
В доказательство - код из библиотеки LDUMP:
Оба кода рабочие, но в LDUMP нигде не входит TABX.Код:;; Распечатка Форм из "Директории файла" (Properties) (DEFUN LDUMP (PROPS) (PROGN (OPEN 1 8 (QUOTE P:)) ; Открыть 1 IOCB на вывод (PR# 1) ; Перенаправить вывод с терминала на 1 IOCB (MAPCAR PROPS ; Для каждой формы в директории ... (LAMBDA (X) ; X - это директория файла (PROGN (TERPRI) ; Исполнять последовательно ... (TERPRI) ; CR (PRIN1 (QUOTE "**** ")) ; Звёздочки без CR (PRINT X) ; Имя формы + CR (PPRINT (GETD X))))) ; Печатать определение (PR# 0) ; Вернуть вывод на Терминал (CLOSE 1))) ; Закрыть 1 IOCB ;; Установка отступа в Печатуемой строке на N позицию пробелами!!! (DEFUN TABX (N) (PROG (COUNT) ; Исполнять последовательно с циклом ... (SETQ COUNT N) ; Инициализировать обратный счётчик LOOP ; Метка (SETQ COUNT (SUB COUNT 1)) ; Декрементировать (COND ((> COUNT 0) ; Пока не ноль (PRIN1 (QUOTE " ")) (GO LOOP))) ; Печать пробела и на метку (RETURN))) ; По исполнении выйти.
В результате, никакой PP печати. Хоть формы-то разделены.
(EDIT при PP пользуется встроеной TAB, которая просто устанавливает позицию в строке терминала, следовательно нет пробелов.
Кроме этого, LDUMP пользуется формой PPRINT в составе EDIT, а значит без загрузки D:EDIT бесполезна.
Пока же я пробую выкорчевать из EDIT PP и заставить её печатать так как надо.
zen




Ответить с цитированием