it-roy-ru.com

Где узнать, как практически использовать Common Lisp

Я программист на C++, пытаюсь выучить Common LISP. Я просмотрел некоторые книги, такие как Land of LISP, и прочитал множество онлайн-статей о различных достоинствах LISP. Однако мне нужен совет.

Почти все, что я читал о Common LISP, связано с тем, насколько он восхитителен и как удивительно быстро вы можете справиться с этим, и как он удивительным образом решил многие проблемы с современными языками программирования 30 лет назад. Кроме того, насколько удивительны макросы и как каждая парадигма программирования (ОО, функциональная, на основе акторов и т.д.) Может использоваться в LISP, и как списки являются окончательной структурой данных. По сути, относиться к LISP как к исследовательскому языку и говорить, насколько он отличается и революционен.

И все эти вещи, вероятно, верны, но проблема в том, что я не видел много вещей, как делать практические вещи, такие как чтение файла и разбиение его на слова и некоторую обработку на нем. Я не заинтересован в изучении Common LISP ради изучения Common LISP, но ради того, чтобы то, что я делал в C++, делалось быстрее и с меньшим количеством ошибок.

так что мой вопрос какой ресурс лучше (будь то веб-сайт, книга, что угодно), который фокусируется на обучении использованию Common LISP для выполнения общих задач программирования нравится

  • Как читать файлы
  • Как прочитать файл, заменить слова в файле и записать результат обратно в файл
  • Итерируйте файлы в каталоге и другие вещи файловой системы
  • Взаимодействовать с базой данных SQL
  • Делать связь через сокеты
  • Потоки для таких вещей, как веб-сервер
  • Создать GUI
  • Выполнять операции над двоичными файлами
  • Напишите парсер (не интерпретатор LISP в LISP, который, как я понимаю, похож на 5 строк LISP)
  • Взаимодействовать с операционной системой (например, вещи, написанные на C или C++), чтобы делать вещи, которые LISP не может делать изначально
  • Как написать расширения LISP на C (это возможно?)
  • Встроить переводчик lua ​​(это возможно?)

А также на менее непосредственном практическом замечании, как реализовать общие структуры данных в LISP, такие как куча, стек, двоичное дерево поиска и т.д. Однако это может быть просто использование операций со списками LISP, таких как car и cdr, правильным способом. Я не знаю.

Я очень сомневаюсь, что что-либо из этого (за маловероятным исключением из последних двух в списке) невозможно с LISP, иначе людям это не понравится. И вышеупомянутый материал, который я прочитал, упоминает множество реальных программ, написанных на LISP (приходит в голову интернет-магазин Yahoo!).

Тем не менее, имея программирование на ( императивном языке? ) раньше, я стремлюсь использовать те новые знания, которые я получаю для написания реальных приложений. , Так какой же самый быстрый способ научиться писать практические программы на Лиспе?

Кстати, я видел Практический общий LISP Питера Сейбела , но, судя по оглавлению, он касается только некоторые вещи, которые я хотел бы научиться использовать LISP.

Еще один вопрос, если можно (извините, если объединить два вопроса в один), где я могу найти ссылку на функции и материал LISP?

И я очень хочу понравиться LISP.

76
NewLisper

Я бы предложил прочитать ' Practical Common LISP ', так как он уже отвечает на некоторые ваши вопросы.

Вероятно, вам следует прочитать три-четыре книги :

Общая ссылка на LISP

Руководство

Теперь следующая вещь, которую вы должны проверить, это руководство вашей реализации LISP. Он описывает множество конкретных расширений: сеть, потоки, ...

Документация для общих реализаций LISP:

SLIME (основанная на Emacs LISP-IDE) имеет Руководство пользователя SLIME .

Документация для общих библиотек LISP:

Библиотеки

Для использования библиотек

Теперь посмотрим на некоторые из ваших пунктов:

  • Как читать файлы

Смотрите словарь файлов и потоков в HyperSpec . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...

  • Как прочитать файл, заменить слова в файле и записать результат обратно в файл

Используйте выше. Смотрите также: НАПИСАТЬ и связанные.

  • Итерируйте файлы в каталоге и другие вещи файловой системы

Смотри выше. КАТАЛОГ, пути, ...

  • Взаимодействовать с базой данных SQL

Используйте, например, библиотеку CLSQL.

  • Делать связь через сокеты

См. Руководство к вашему LISP или используйте одну из переносимых библиотек. Смотрите Quicklisp.

  • Потоки для таких вещей, как веб-сервер

См. Руководство к вашему LISP или используйте одну из переносимых библиотек. Смотрите Quicklisp.

  • Создать GUI

Зависит. Смотрите Quicklisp или библиотеку для конкретной реализации.

  • Выполнять операции над двоичными файлами

Смотрите Hyperspec для файловых и потоковых операций. ЗАПИСЬ, БАЙТ. Откройте поток как двоичный поток.

  • Напишите парсер (не интерпретатор LISP в LISP, который, как я понимаю, похож на 5 строк LISP)

Используйте один из существующих инструментов для этого. Изучите существующие парсеры. Есть много парсеров, написанных на LISP, но не так много в книгах по этому поводу (кроме парсеров естественного языка, которые описаны в литературе по ИИ).

  • Взаимодействовать с операционной системой (например, вещи, написанные на C или C++), чтобы делать вещи, которые LISP не может делать изначально

Зависит. Смотрите Quicklisp или библиотеку для конкретной реализации.

  • Как написать расширения LISP на C (это возможно?)

Зависит. Смотрите Quicklisp или библиотеку для конкретной реализации. -> FFI

Последний совет: читайте код других авторов.

Изучите другой код LISP. Существует достаточно разнообразного кода LISP. От веб-серверов до программного обеспечения для музыкальной композиции.

88
Rainer Joswig

Проверьте Cliki the Common LISP wiki он предоставляет список библиотек, доступных для Common LISP, которые помогут вам выполнить все ваши задачи.

Кроме того, вы захотите проверить Общая книга LISP Cookbook (есть и еще обновленная версия ). Он содержит кучу кода для общих задач, таких как чтение файла по одной строке за раз и Интерфейсы внешних функций для взаимодействия с библиотеками, написанными на C .

Вы можете написать расширения для LISP на C в зависимости от того, какую реализацию вы используете. Emacs-LISP, например, позволяет вам делать это, хотя это не Common LISP. Обычно вам нужно написать код в Common LISP, а затем оптимизировать его настолько, насколько это возможно, используя различные объявления компилятора LISP или другой метод, в котором вы используете интерфейс сторонней функции.

Потоки зависят от того, какую реализацию вы используете, но я думаю, что у большинства из них есть потоки.

Hunchentoot - один из лучших веб-серверов LISP, с которым довольно легко начать работу. Вам не нужно писать какой-либо поточный код самостоятельно, вам просто нужно написать функции обработчика HTTP-запросов.

Кто-то скомпилировал список параметров графического интерфейса для LISP :

  • cl-gtk2, интерфейс к графической библиотеке GTK
  • McClim
  • Гранат
  • Общий Qt
  • EQL
6
Rudolf Olah