LINUX.ORG.RU

Ответ на: комментарий от anonymous

>В лиспе есть всё, что уже заново переизобретено в других языках.
Даже статическая типизация?

anonymous
()
Ответ на: комментарий от anonymous

>Пример? ИМХО это вообще-то невозможно. Предполагаю что можно переопределить группу функций(или макросов?) set* на проверку типа перед установкой значения.

mrco ★★
()
Ответ на: комментарий от anonymous

А что такое строгая типизация? Бьет линейкой по пальцам?

А пример, пожалуйста:

(defun foo (bar)
  (declare (fixnum bar))
  (1+ bar))

stassats ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

> packages?

(нытьё) Да, только если в своём package использовать package COMMON-LISP, то куча имён у вас уже будет задействована (если вы их не будете затенять), а если вы не будете его использовать, то к каждому стандартному используемому имени надо будет приписывать префикс CL:

Хотя можно написать "шаблон" для объявления своих packages с импортом из CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии с именами будут вставать в полный рост при попытке импортировать имена из вашего package в другой, который объявлен использующим CL или любой другой, который в свою очередь использует CL

P.S. Вопросы "в никуда": отчего так мало в лисповых программах используют labels и инлайнят функции, которые вызываются один единственный раз?

yyk ★★★★★
()
Ответ на: комментарий от yyk

>Хотя можно написать "шаблон" для объявления своих packages с импортом из
>CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии
с
>именами будут вставать в полный рост при попытке импортировать имена из
>вашего package в другой, который объявлен использующим CL или любой
>другой, который в свою очередь использует CL

А можно так сделать, чтобы свои имена вызывать с префиксом MYPACKAGE:

MYPACKAGE:FUNC
MYPACKAGE:FUNC2
?

anonymous
()
Ответ на: комментарий от yyk

> если в своём package использовать package COMMON-LISP, то куча имён у вас уже будет задействована (если вы их не будете затенять), а если вы не будете его использовать, то к каждому стандартному используемому имени надо будет приписывать префикс CL:

Это, к сожалению, неизбежно. Придется придумывать имена, которых нет в CL.

> можно написать "шаблон" для объявления своих packages с импортом из CL только тех имён, которые вы сочтёте необходимыми. Но тогда коллизии с именами будут вставать в полный рост при попытке импортировать имена из вашего package в другой

defpackage? :export?

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от anonymous

> А можно так сделать, чтобы свои имена вызывать с префиксом MYPACKAGE:

> MYPACKAGE:FUNC > MYPACKAGE:FUNC2 > ?

> И не иметь этих проблем?

Смотря что понимается под проблемами. Написать можно при условии, что это единственные функции в MYPACKAGE и вы никогда не будете делать (use-package :MYPACKAGE)

Шаг вправо, шаг влево - расстрел на месте :)

yyk ★★★★★
()
Ответ на: комментарий от stassats

> Неужели так трудно придумать имена, отличные от имен в CL?

Я уже "ныл" в другом топике: в отличие от других языков в CL есть только пространство имён "вызываемых" сущностей (функции/макры/и т.п.). Т.е. все дженерики (ака методы классов) - там же. И написав для своих классов read/write использовать потом их из других модулей вы можете только с префиксами своего пакета - т.е. без импортирования.

Может как-то можно делать "локальное" импортирование (аля use/unuse-package для локального блока кода)

(with-using-package (package-names...) ...)

(with-import ((names...) package)...) ...)

yyk ★★★★★
()
Ответ на: комментарий от watashiwa_daredeska

> Это, к сожалению, неизбежно. Придется придумывать имена, которых нет в CL.

Так я о том и "стенаю", что больно много public имён в CL :)

> defpackage? :export?

Это понятно, но это способ интер-использования пакетов, а не снижения многословности.

yyk ★★★★★
()
Ответ на: комментарий от stassats

Две самый больших проблемы в CS - именование и инвалидация кэша (с) непомню кто

cobold ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.