Я программист на C ++, пытаюсь изучить Common Lisp. Я просмотрел некоторые книги, такие как Land of Lisp, и прочитал множество онлайн-статей о различных достоинствах Lisp. Однако мне нужен совет.
Почти все, что я читал о Common Lisp, связано с тем, насколько он удивителен и насколько быстро вы можете с ним справляться, и о том, как 30 лет назад он превосходно решал многие проблемы с современными языками программирования. Также, насколько удивительны макросы и как каждая парадигма программирования (объектно-ориентированная, функциональная, основанная на акторах и т.д.) может быть использована в Lisp, и как списки являются окончательной структурой данных. По сути, рассматривать Lisp как язык исследований и говорить, насколько он отличается и революционен.
И все это, вероятно, правда, но проблема в том, что я не видел много того, как делать практические вещи, например, читать файл, разбивать его на слова и обрабатывать его. Мне интересно изучать Common Lisp не ради изучения Common Lisp, а ради того, чтобы то, что я делал на C ++, было сделано быстрее и с меньшим количеством ошибок.
Итак, мой вопрос в том, какой ресурс является лучшим (будь то веб-сайт, книга, что угодно), который фокусируется на обучении использованию Common Lisp для выполнения общих задач программирования, таких как
- Как читать файлы
- Как прочитать файл, заменить слова в файле и записать результат обратно в файл
- Итерировать файлы в каталоге и другие файлы файловой системы
- Взаимодействовать с базой данных SQL
- Связь через розетки
- Потоки для таких вещей, как веб-сервер
- Создать графический интерфейс
- Выполнять операции с бинарными файлами
- Напишите парсер (не интерпретатор Лиспа в Лиспе, который, как я понимаю, похож на 5 строк Лиспа)
- Взаимодействовать с операционной системой (т.е. с вещами, написанными на C или C ++), чтобы делать то, что Lisp не может делать изначально.
- Как писать расширения Lisp на C (возможно ли это?)
- Встроить интерпретатор lua (возможно ли это?)
А также на менее непосредственно практической точки зрения , как реализовать общие структуры данных в лепет , таких как куча, стек, бинарное дерево поиска и т.д. Однако это может быть только с помощью списка операций LISP как car
и cdr
в правильном направлении. Я не знаю.
Я очень сомневаюсь, что что-либо из этого (за маловероятным исключением двух последних в списке) невозможно с Lisp, иначе людям это не понравилось бы. И в вышеупомянутом материале, который я прочитал, упоминается множество реальных программ, написанных на Lisp (на ум приходит интернет-магазин Yahoo!).
Однако, имея раньше программирование на ( ? ) Императивном языке, мне не терпится использовать полученные знания для написания реальных приложений. Итак, каков самый быстрый способ научиться писать практическое программное обеспечение с помощью Lisp?
Между прочим, я видел практический Common Lisp Питера Сейбеля, но, судя по оглавлению, он затрагивает только некоторые вещи, для которых я хотел бы научиться использовать Lisp.
Еще один вопрос, если можно (извините, если это объединяет два вопроса в один), где я могу найти ссылку на функции Lisp и прочее?
И мне очень хочется любить Лисп.
источник
Ответы:
Я предлагаю прочитать « Практический Common Lisp », поскольку он уже отвечает на некоторые из ваших вопросов.
Вероятно, вам стоит прочитать три-четыре книги :
Справочник по Common Lisp
Руководства
Следующее, что вы должны проверить, - это руководство по вашей реализации Lisp. Он описывает множество конкретных расширений: сети, потоки, ...
Документация по реализациям Common Lisp:
SLIME (Lisp-IDE на основе Emacs) имеет руководство пользователя SLIME .
Документация для библиотек Common Lisp:
Библиотеки
Для библиотек используйте
Теперь посмотрим на некоторые из ваших точек зрения:
См. Словарь файлов и потоков в HyperSpec . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...
Используйте выше. См. Также: НАПИСАТЬ и т.п.
См. Выше. СПРАВОЧНИК, пути, ...
Используйте, например, библиотеку CLSQL.
См. Руководство к вашему Лиспу или воспользуйтесь одной из переносимых библиотек. См. Quicklisp.
См. Руководство к вашему Лиспу или воспользуйтесь одной из переносимых библиотек. См. Quicklisp.
Смотря как. См. Quicklisp или библиотеку для конкретной реализации.
См. Hyperspec для файловых и потоковых операций. ЗАПИСЬ БАЙТА, ЧТЕНИЕ БАЙТА. Откройте поток как двоичный поток.
Используйте для этого один из существующих инструментов. Изучите существующие парсеры. На Лиспе написано много парсеров, но мало в книгах об этом (кроме парсеров естественного языка, которые описаны в литературе по ИИ).
Смотря как. См. Quicklisp или библиотеку для конкретной реализации.
Смотря как. См. Quicklisp или библиотеку для конкретной реализации. -> FFI
Последний совет: прочтите код других авторов.
Изучите другой код Lisp. Существует достаточно очень разнообразного кода на Лиспе. От веб-серверов до программного обеспечения для создания музыки.
источник
Ознакомьтесь с Cliki, вики Common Lisp, он предоставляет список библиотек, доступных для Common Lisp, которые помогут вам выполнить все ваши задачи.
Кроме того, вы захотите проверить Common Lisp Cookbook (есть также более обновленная версия ). Он имеет кучу коды для общих задач , таких как чтение одной строки файла в то время , и иностранные функциональных интерфейсов для взаимодействия с библиотеками , написанных на C .
Вы можете писать расширения для Lisp на C в зависимости от того, какую реализацию вы используете. Emacs-Lisp, например, позволяет вам это делать, хотя это не Common Lisp. Обычно вы хотите написать код на Common Lisp, а затем оптимизировать его, насколько это возможно, используя различные объявления компилятора Lisp или другой метод, в котором вы используете интерфейс внешней функции.
Многопоточность зависит от того, какую реализацию вы используете, но я думаю, что у большинства из них сейчас есть потоки.
Hunchentoot - один из лучших веб-серверов Lisp, с которым довольно легко начать работу. Вам не нужно самостоятельно писать какой-либо потоковый код, вам просто нужно написать функции обработчика HTTP-запросов.
Кто-то составил список опций графического интерфейса для Лиспа :
источник