У меня есть опыт работы с Haskell, и я хочу изучить Common Lisp.
Хорошо обсуждалось, что CL «не является функциональным языком», но я хотел бы знать, можно ли его использовать в качестве функционального языка.
Например, можно ли неизменно использовать все типы данных? Хэш-таблицы Common Lisp, по-видимому, устанавливаются с использованием setf
, что явно имеет изменяемую ориентацию. Есть ли способ использовать его неизменным образом?
Помимо аспекта «IO» Common Lisp («чисто» аспекта Haskell), где я взаимодействую с файлами, сетями и т. д., могу ли я удобно писать код на Lisp и быть уверенным, что код будет иметь ссылочную прозрачность?
Могу ли я ожидать таких свойств от популярных библиотек, доступных в Common Lisp?
Есть ли общие идиомы или аспекты языка, которые усложняют это?