>Пример? ИМХО это вообще-то невозможно.
Предполагаю что можно переопределить группу функций(или макросов?) set* на проверку типа перед установкой значения.
(нытьё) Да, только если в своём package использовать package COMMON-LISP, то куча имён у вас уже будет задействована (если вы их не будете затенять), а если вы не будете его использовать, то к каждому стандартному используемому имени надо будет приписывать префикс CL:
Хотя можно написать "шаблон" для объявления своих packages с импортом из CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии с именами будут вставать в полный рост при попытке импортировать имена из вашего package в другой, который объявлен использующим CL или любой другой, который в свою очередь использует CL
P.S. Вопросы "в никуда": отчего так мало в лисповых программах используют labels и инлайнят функции, которые вызываются один единственный раз?
>Хотя можно написать "шаблон" для объявления своих packages с импортом из
>CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии
с
>именами будут вставать в полный рост при попытке импортировать имена из
>вашего package в другой, который объявлен использующим CL или любой
>другой, который в свою очередь использует CL
А можно так сделать, чтобы свои имена вызывать с префиксом MYPACKAGE:
> если в своём package использовать package COMMON-LISP, то куча имён у вас уже будет задействована (если вы их не будете затенять), а если вы не будете его использовать, то к каждому стандартному используемому имени надо будет приписывать префикс CL:
Это, к сожалению, неизбежно. Придется придумывать имена, которых нет в CL.
> можно написать "шаблон" для объявления своих packages с импортом из CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии с именами будут вставать в полный рост при попытке импортировать имена из вашего package в другой
> А можно так сделать, чтобы свои имена вызывать с префиксом MYPACKAGE:
> MYPACKAGE:FUNC
> MYPACKAGE:FUNC2
> ?
> И не иметь этих проблем?
Смотря что понимается под проблемами. Написать можно при условии, что
это единственные функции в MYPACKAGE и вы никогда не будете делать
(use-package :MYPACKAGE)
> Неужели так трудно придумать имена, отличные от имен в CL?
Я уже "ныл" в другом топике: в отличие от других языков в CL есть только пространство имён "вызываемых" сущностей (функции/макры/и т.п.). Т.е. все дженерики (ака методы классов) - там же. И написав для своих классов read/write использовать потом их из других модулей вы можете только с префиксами своего пакета - т.е. без импортирования.
Может как-то можно делать "локальное" импортирование (аля use/unuse-package для локального блока кода)