Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

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

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

И мне очень нравится Lisp.

4b9b3361

Ответ 1

Я бы предложил прочитать Практический общий Lisp ', так как он уже отвечает на некоторые из ваших вопросов.

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

Общий Lisp Ссылка

Руководства

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

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

SLIME (на основе emacs Lisp -IDE) есть Руководство пользователя SLIME.

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

Библиотеки

Для библиотек используйте

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

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

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

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

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

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

См. выше. DIRECTORY, pathnames,...

  • Взаимодействие с SQL db

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

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

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

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

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

  • Создание графических интерфейсов

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

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

См. Hyperspec для операций с файлами и потоками. WRITE-BYTE, READ-BYTE. Откройте поток как двоичный поток.

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

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

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

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

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

Зависит. См. Quicklisp или специфичную для реализации библиотеку. → FFI

Итоговый совет: прочитайте код от других авторов.

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

Ответ 2

Отъезд Cliki the Common Lisp wiki предоставляет список библиотек, доступных для Common Lisp, который поможет вам выполнить все ваши товары.

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

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

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

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

Кто-то скомпилировал список параметров GUI для Lisp:

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