Между Elisp и Common Lisp есть конфликты пространства имен, но пакет cl обходит их, добавляя звездочку к повторным именам.Например, он реализует версию defun для Common Lisp, но называет ее defun *.В результате между cl и Elisp нет столкновений в пространствах имен, и вполне безопасно (требуется 'cl) .
Если вы хотите избавиться отглупое предупреждение, настройте переменную byte-compiler-warnings . [1]Это отключит предупреждение при компиляции кода.Если вы распространяете код, предупреждение, вероятно, вернется, когда его скомпилирует кто-то другой.Если вы не хотите, чтобы это происходило, используйте код:
(with-no-warnings
(require 'cl))
Подобным образом вы можете остановить предупреждение байт-компилятора о любой форме Lisp. [2]Это, вероятно, не очень хорошая идея в целом, но вы можете оправдать ее в этом случае.
Код:
(eval-when-compile
(require 'cl))
избавит от предупреждения, но вы толькобыть в состоянии использовать макросы из пакета, если вы это сделаете.Макросы оцениваются во время компиляции, и Elisp не нужно знать о них во время выполнения.Если вы используете макросы только из какого-либо пакета, а не только cl , то будет хорошей идеей использовать eval-when-compile , так как это остановит ненужные пакеты во время выполнения,и экономия памяти, и ускорение кода.Но мне кажется, что неправильно использовать эту функцию, чтобы избежать предупреждения.И, конечно же, если вы хотите использовать любую из функций из cl , вы все равно не можете использовать eval-when-compile .
[1] Вам может потребоваться добавить (требуется 'bytecomp) к вашему файлу .emacs, чтобы получить доступ к этой переменной.
[2] В любом случае, теоретически, но есть ошибка в with-no-warnings это означает, что он не подавляет некоторые предупреждения о лексических переменных.