Common Lisp를 실제로 사용하는 방법을 배울 수있는 곳


79

저는 Common Lisp를 배우려는 C ++ 프로그래머입니다. 저는 Land of Lisp와 같은 책을보고 Lisp의 다양한 장점에 대한 수많은 온라인 기사를 읽었습니다. 하지만 조언이 필요합니다.

내가 Common Lisp에 대해 읽은 거의 모든 것은 그것이 얼마나 놀라운 지, 얼마나 빨리 작업을 수행 할 수 있는지, 그리고 30 년 전 현대 프로그래밍 언어의 많은 문제를 어떻게 해결했는지와 관련이 있습니다. 또한 매크로가 얼마나 놀라운 지, 모든 프로그래밍 패러다임 (OO, 기능, 행위자 기반 등)이 Lisp에서 어떻게 사용될 수 있는지, 그리고 목록이 궁극적 인 데이터 구조 인 방법도 있습니다. 기본적으로 Lisp를 연구 언어처럼 취급하고 그것이 얼마나 다르고 혁명적인지 말합니다.

그리고 그 모든 것들은 아마도 사실 일 것입니다. 그러나 문제는 파일을 읽고 그것을 단어로 나누고 그것에 대해 처리하는 것과 같은 실용적인 일을하는 방법을 많이 보지 못했다는 것입니다. 나는 Common Lisp를 배우기 위해 Common Lisp를 배우는 데 관심이 없지만 C ++에서했던 일을 더 빠르고 더 적은 오류로 처리하기 위해서입니다.

그래서 제 질문은 Common Lisp를 사용하여 다음 과 같은 일반적인 프로그래밍 작업을 수행하는 방법을 가르치는 데 초점맞춘 최고의 리소스 (웹 사이트, 책 등) 무엇인지입니다.

  • 파일 읽는 방법
  • 파일을 읽고, 파일의 단어를 바꾸고, 결과를 파일에 다시 쓰는 방법
  • 디렉토리 및 기타 파일 시스템 항목의 파일 반복
  • SQL db와 상호 작용
  • 소켓을 통한 통신 수행
  • 웹 서버와 같은 것을위한 스레딩
  • GUI 생성
  • 바이너리 파일에 대한 작업 수행
  • 파서를 작성하십시오 (Lisp의 Lisp에 대한 인터프리터가 아닙니다. 이는 Lisp의 5 줄과 같습니다)
  • 운영 체제 (예 : C 또는 C ++로 작성된 항목)와 상호 작용하여 Lisp가 기본적으로 수행 할 수없는 작업을 수행합니다.
  • Lisp 확장을 C로 작성하는 방법 (가능합니까?)
  • 루아 인터프리터 삽입 (가능합니까?)

또한 그러나 그처럼 리스프의 목록 작업을 사용 할 수있다 등 힙, 스택, 이진 검색 트리로 혀짤배기에서 일반적으로 데이터 구조를 구현하는 방법을 덜 즉시 실제 노트에 car그리고 cdr올바른 방법으로. 모르겠어요.

나는 이것들 중 어떤 것도 (목록의 마지막 두 개를 제외하고는) 불가능하거나 사람들이 너무 좋아하지 않을 것이라고 매우 의심합니다. 앞서 읽은 내용은 Lisp로 작성된 실제 소프트웨어를 많이 언급합니다 (Yahoo! 웹 스토어가 떠 오릅니다).

그러나 이전에 ( the? ) 명령형 언어로 프로그래밍 했으므로 실제 응용 프로그램을 작성하기 위해 얻은 새로운 지식을 사용하고 싶습니다. 그렇다면 Lisp로 실용적인 소프트웨어 작성을 배우는 가장 빠른 방법은 무엇일까요?

그건 그렇고, 나는 Peter Seibel의 Practical Common Lisp를 보았지만 TOC로 판단 하면 Lisp를 사용하여 배우고 싶은 것들 중 일부 에 대해서만 다룹니다 .

내가 할 수 있다면 한 가지 더 질문 (두 질문을 하나로 결합하는 경우 죄송합니다), Lisp의 기능 및 물건에 대한 참조를 어디서 찾을 수 있습니까?

그리고 저는 Lisp를 정말 좋아하고 싶습니다.


3
좋은 질문. C ++ 프로그래머 인 저도 이번 여름에 주로 답변에서 제안 된 책으로 Lisp를 배우고 있습니다. 지금까지 매우 행복했지만 여전히 매크로를 통해 내 길을 가고 있습니다. On Lisp by Paul Graham은 진정한 보석입니다. 또한 Emacs Lisp의 자료는 일반적으로 Lisp를 추적하는 데 도움이 될뿐만 아니라 편집기 자체에서 실제 유용한 스크립트를 작성할 수 있도록합니다.
Diego Sevilla

이제 Docs.SO의 Common Lisp 시작하기 페이지에 광범위한 Common Lisp 리소스 페이지가 있습니다.
Gustav Bertram 2017

또한 최신 Common Lisp Cookbook이 있습니다. 우리가 검색 할 수 있도록 자사의 TOC는 아직 생각이 광범위하지 멋진현대 에 라이브러리를 최고 CL의 목록입니다. 그리고 E. Weitz의 "CL Recipes"는 +1입니다.
Ehvince

답변:


95

나는 이미 몇 가지 질문에 답하기 때문에 ' Practical Common Lisp '를 읽을 것을 제안 합니다.

읽어야 할 책이 ​​3 ~ 4 권 정도 있습니다 .

공통 Lisp 참조

매뉴얼

이제 다음으로 확인해야 할 것은 Lisp 구현 매뉴얼입니다. 네트워킹, 스레드 등 많은 특정 확장을 설명합니다.

Common Lisp 구현에 대한 문서 :

SLIME (Emacs 기반 Lisp-IDE)에는 SLIME 사용 설명서가 있습니다.

Common Lisp 라이브러리에 대한 문서 :

도서관

도서관 사용

이제 몇 가지 요점을 살펴 보겠습니다.

  • 파일 읽는 방법

HyperSpec 의 파일 및 스트림 사전을 참조하십시오 . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...

  • 파일을 읽고, 파일의 단어를 바꾸고, 결과를 파일에 다시 쓰는 방법

위에서 사용하십시오. 참조 : 쓰기 및 관련.

  • 디렉토리 및 기타 파일 시스템 항목의 파일 반복

위 참조. 디렉토리, 경로 이름, ...

  • SQL db와 상호 작용

예를 들어 CLSQL 라이브러리를 사용하십시오.

  • 소켓을 통한 통신 수행

Lisp의 설명서를 참조하거나 휴대용 라이브러리 중 하나를 사용하십시오. Quicklisp를 참조하십시오.

  • 웹 서버와 같은 것을위한 스레딩

Lisp의 설명서를 참조하거나 휴대용 라이브러리 중 하나를 사용하십시오. Quicklisp를 참조하십시오.

  • GUI 생성

의존합니다. Quicklisp 또는 구현 별 라이브러리를 참조하십시오 .

  • 바이너리 파일에 대한 작업 수행

파일 및 스트림 작업은 Hyperspec을 참조하십시오. WRITE-BYTE, READ-BYTE. 이진 스트림으로 스트림을 엽니 다.

  • 파서를 작성하십시오 (Lisp의 Lisp에 대한 인터프리터가 아닙니다. 이는 Lisp의 5 줄과 같습니다)

이를 위해 기존 도구 중 하나를 사용하십시오. 기존 파서를 연구하십시오. Lisp로 작성된 파서가 많지만 이에 대한 책에는 많지 않습니다 (AI 문헌에 설명 된 자연어 파서 제외).

  • 운영 체제 (예 : C 또는 C ++로 작성된 항목)와 상호 작용하여 Lisp가 기본적으로 수행 할 수없는 작업을 수행합니다.

의존합니다. Quicklisp 또는 구현 별 라이브러리를 참조하십시오 .

  • Lisp 확장을 C로 작성하는 방법 (가능합니까?)

의존합니다. Quicklisp 또는 구현 별 라이브러리를 참조하십시오 . -> FFI

마지막 조언 : 다른 저자의 코드를 읽어보십시오.

다른 Lisp 코드를 연구하십시오. 매우 다양한 Lisp 코드가 충분합니다. 웹 서버에서 음악 작곡 소프트웨어까지.


2
많은 것들이 구현에 특화된 것 같습니다. 특정 구현이 아니라 운영 체제에 특정한 C와 같은 것이 있습니까? 코드를 원하는 모든 사람이 선택한 구현을 사용하도록 만드는 것은 불가능한 것 같습니다. 또한 저는 AI에별로 관심이 없습니다.
NewLisper 2011-08-29

4
@NewLisper : 이식성 라이브러리가 많이 있습니다. Quicklisp를 참조하십시오.
Rainer Joswig 2011 년

4
@NewLisper : AI에 관심이 없더라도 Lisp가 발명 된 '기호 프로그래밍'접근 방식을 설명하기 때문에 일부 문헌을 읽어야합니다.
Rainer Joswig 2011-08-29

2
@NewLisper : 이것은 꽤 완전한 대답입니다. Lisp는 OS 및 C / C ++ 호출과 관련하여 Python에 더 가깝습니다. FFI (외부 기능 인터페이스)를 구성하는 것은 매우 간단하다고합니다. 또한 웹상에서 Common Lisp 사용자의 우세가 SBCL을 사용하고있는 것 같다는 점도 주목할 가치가 있습니다.
Paul Nathan

2
구체적인 라이브러리를 추가하겠습니다. sockets : usocket; 웹 서버 : hunchentoot; 스레딩 : 보르도 스레드, chanl; OS 상호 작용 / 연결 C-stuff : CFFI, UFFI.
Svante 2011-08-30

6

모든 항목을 수행하는 데 도움이되는 Common Lisp에 사용할 수있는 라이브러리 목록을 제공하는 Common Lisp 위키 Cliki를 확인하십시오 .

또한 Common Lisp Cookbook (더 업데이트 된 버전도 있음 ) 을 확인하고 싶을 것 입니다. 그것은 일반적인 같은 작업을위한 코드의 무리가 한 번에 파일 한 라인을 읽기C로 작성된 라이브러리와 상호 작용하기위한 외교 기능 인터페이스 .

사용중인 구현에 따라 C에서 Lisp 용 확장을 작성할 수 있습니다. 예를 들어 Emacs-Lisp를 사용하면 Common Lisp는 아니지만 그렇게 할 수 있습니다. 일반적으로 원하는 것은 Common Lisp로 코드를 작성한 다음 다른 Lisp 컴파일러 선언 또는 외부 함수 인터페이스를 사용하는 다른 방법을 사용하여 가능한 한 많이 최적화하는 것입니다.

스레딩은 사용하는 구현에 따라 다르지만 대부분은 현재 스레드가 있다고 생각합니다.

Hunchentoot 는 최고의 Lisp 웹 서버 중 하나이며 시작하기가 매우 쉽습니다. 스레딩 코드를 직접 작성할 필요가 없으며 HTTP 요청 처리기 함수 만 작성하면됩니다.

누군가 Lisp의 GUI 옵션 목록을 컴파일 했습니다 .

  • cl-gtk2, GTK gui 라이브러리에 대한 인터페이스
  • McClim
  • 석류석
  • 일반적인 Qt
  • EQL

1
Common Lisp Cookbook은 정말 유용 해 보입니다. 내가 다른 사람에게 말했듯이, 많은 것들이 구현에 특정한 것 같습니다. 코드를 실행할 수있는 모든 사람이 사용하는 것과 동일한 구현을 사용하도록 만드는 것은 공정하지 않은 것 같습니다. 그게 그대로입니까?
NewLisper 2011-08-29

네, 그렇습니다. 어떤 사람들은 ANSI Common Lisp 표준을 고수하거나 여러 구현에서 작동하는 라이브러리를 고수하려고 노력하므로 너무 번거롭지 않습니다.

ANSI Common Lisp를 고수하면 파일 시스템, 네트워킹 등 많은 일을 할 수있는 능력을 잃습니까?
NewLisper

Lisp를 사용하면 구현 특정 API 위에 이식 가능한 라이브러리를 쉽게 작성할 수 있으므로 걱정하지 않아도됩니다.
Pavel Penev 2011 년

이봐 요, Cookbook의 URL을 lispcookbook.github.io/cl-cookbook 으로 변경해 주 시겠습니까? 콘텐츠는 동일하지만 대체로 확대되고 오래된 항목은 제거되었으며 더보기 좋은 모양입니다. git 역사를 참조하십시오! 감사.
Ehvince
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.