Примеры отличного кода Common Lisp?

Я выучил достаточно Common Lisp, чтобы писать приложения. Я прочитал Практический Common Lisp Сейбеля

Какие библиотеки или программы мне следует прочитать, чтобы понять идиомы, Дао, Common Lisp?


person Frank Shearar    schedule 06.04.2010    source источник


Ответы (7)


CL-PPCRE не зря часто приводят в качестве хорошего примера. На самом деле, вероятно, любая из библиотек Эди Вейца будет полезна для чтения, но CL-PPCRE особенно умен, и это полезная и впечатляющая библиотека. Кроме того, многие реализации CL написаны в основном на CL. Может быть довольно продуктивно выбрать какую-то часть CL, которая обычно реализуется в CL, и сравнить, как с ней справляются разные реализации. В частности, одними из лучших примеров больших полезных макросистем являются реализации вещей в стандарте. Loop - интересное чтение, или, если вы действительно амбициозны, можете сравнить несколько реализаций CLOS.

Если есть какая-то область вычислений, которая вас особенно интересует, возможно, стоит упомянуть об этом, чтобы люди могли адаптировать для этого рекомендации.

person Tagore Smith    schedule 06.04.2010
comment
Sacla реализует значительный фрагмент Common Lisp в Common Lisp, так что это будет хороший пример того, что вы предлагаете. - person jmbr; 06.04.2010

Это другая книга, так что это может быть не совсем то, что вы ищете, но Парадигмы в искусственном Интеллектуальное программирование содержит множество хорошо написанных небольших программ на Common Lisp. Это не совсем естественный код, особенно в первых нескольких главах, потому что, как и код в Practical Common Lisp, он фокусируется на обучении программированию на CL, но его все же стоит прочитать. Он также содержит несколько отличных примеров того, как вы можете создавать другие языки на основе Common Lisp, и дает несколько ценных советов о том, как улучшить производительность программ CL.

person Pillsy    schedule 06.04.2010
comment
Это отличная рекомендация. Код в книге в целом очень хорош, но Норвиг все больше и больше объясняет, как писать лучший код от главы к главе. Он действительно начинает с базовых версий, а затем показывает, как их улучшить. - person Rainer Joswig; 06.04.2010
comment
Я определенно поддержу это. PAIP - одна из моих любимых книг о программировании, хотя название немного вводит в заблуждение, ИМХО. Одно я бы сказал по этому поводу, так это то, что мне этот стиль кажется немного старомодным или академическим. Это не критика - мне кажется, что модная идиома CL немного изменилась за последние 10-15 лет, но нет ничего плохого в коде, который не следует моде. - person Tagore Smith; 06.04.2010

Остальные рекомендации (PAIP и CL-PPCRE) превосходны. Я также предлагаю ознакомиться с кодом Александрии, а также взглянуть на GBBopen.

person jmbr    schedule 06.04.2010

Искусство протокола метаобъектов - это книга с самым красивым кодом из когда-либо написанных.

person FlinkmanSV    schedule 14.04.2010

LISP (Lisp In Small Pieces) - отличная книга; показывает clossette (небольшую систему объектов) и некоторые вещи компилятора. Без сомнения, книга Норвига потрясающая.

Мне тоже очень нравится «Построение решателей проблем», но код немного грубоват. Я не привык связывать переменные с динамической областью видимости в списке параметров. Но он сделал много забавных улучшений, пытаясь «предварительно скомпилировать» сеть дискриминации. В этой книге представлены другие подходы к некоторым кодам Норвига; Я по-прежнему считаю, что код Норвига - это гораздо более «аккуратный и чистый» код (его легче читать и понимать, но при этом он остается креативным).

«Построение решателей проблем» должно иметь предупреждающую метку вроде «вам понадобится аспирен (sp)». Мне показалось, будто молния ударила меня в голову, когда я наконец «понял» rms и зависимость Суссмана, направленную на возврат. Компиляция pdis тоже была великолепной. Отличный материал. Я просто хотел бы все это запомнить ...

person steve    schedule 24.12.2011

Мне нравится код SBCL.

person Leslie P. Polzer    schedule 09.04.2010

Единственное, что я предлагаю, - это программировать. Я так и сделал.

Я сделал две вещи. Один я решил проблему, с которой я был знаком, фреймворк модульного тестирования и расширил его, включив в него наборы тестов. Чтобы получить представление о написании макросов.

Второе, что я сделал, - это поигрался с базовыми объектами в CL. Макросы, замыкания и стиль.

Также не забывайте получать отзывы от Lispers о вашем коде.

(defun ugly-lisp-code? () ())

person Gutzofter    schedule 12.04.2010
comment
Вы абсолютно правы в том, что вам действительно нужно программировать для развития навыков. Однако, как и в случае с авторами (и вы коснулись этого), нам иногда нужно увидеть, что значит хорошее, чтобы мы могли его подражать. - person Frank Shearar; 12.04.2010
comment
Однако это больше, чем просто «хорошо». Попробуйте перейти от императивного к декларативному ХОРОШЕМУ. - person Gutzofter; 14.04.2010