2013-03-08 2 views
3

Common Lisp에서 quicklisp은 널리 사용되는 라이브러리 관리 도구입니다. 나는이 도구를 사용할 것이고 CL-WHO를 사용해 볼 것입니다. SBCL 1.0.57 구현을 사용합니다. 나는 내 자신의 질문에 답할 것이다.Common Lisp에서 외부 라이브러리 또는 패키지를 사용하는 예제

초보자로서 ASDF와 quicklisp이 실제로 어떻게 작동하는지 명확하지 않습니다. 따라서 quicklisp을 통해 다운로드 한 패키지 또는 라이브러리를 외부 소스 파일에 실제로 사용하는 방법이 명확하지 않습니다. quicklisp FAQ는 적어도 현재로서는 도움이되지 않습니다. 파이썬에서는 믿을 수 없을 정도로 간단합니다. '가져 오기 somemodule'을 넣을 수 있으며 인생은 위대합니다. CL + quicklisp에 해당하는 기능이 있습니까?

검색하면 많은 결과를 얻을 수 있습니다.

Lisp importing/loading file

How to use packages installed by quicklisp?

나는이를 통해 읽고 있던 원래, 적어도 하나 개의 질문이 마음에 와서 : 난 사실에 대해 걱정해야합니까 여기 내가 찾은 가장 관련있는 것들 중 일부입니다 내가 quicklisp을 사용하고 있다면 ASDF? Quicklisp는 더 높은 수준의 관리 도구 인 것으로 보입니다. 다른 사람들은 quickproject 사용을 제안합니다. 하지만 은 실제로이 필요합니까?

+0

quicklisp이 같은 패키지 관리자에 해당하는 더 할 것 테스트하는 빠른 방법 apt-get을 우분투와 항공 자위대는 make-의 아날로그입니다 - 다른 기능. – mcheema

답변

0

다운로드 CL-누가 quicklisp 페이지의 지침 통해하면이를 실행

#!/usr/bin/sbcl --script 

(load "~/quicklisp/setup.lisp") 
(ql:quickload "asdf") 
(asdf:load-system 'cl-who) 

(with-open-file (*standard-output* "out.html" :direction :output) 
       (cl-who:with-html-output (*standard-output* nil :indent t) 
            (:html 
            (:head 
            (:title "Test page")) 
            (:body 
            (:p "CL-WHO is really easy to use"))))) 
초보자으로

, 또는 정말 게으른 사람, 당신은 상단에 3 선을 작성해야 할 이유가 없습니다 파이썬에서와 같이 하나만 쓰는 대신에.

+2

파이썬과 커먼 리스프는 서로 다른 개발 및 사용 모델을 가지고 있습니다.Common Lisp는 대개 Python과 같은 배치 또는 스크립팅 언어로 사용되지 않습니다. 일반적으로 환경을 시작하고, 지원 코드를로드하고, 함수 호출을 시작합니다. 능률적 인 스크립팅 형식의 사용 방법이 있다면 좋을 수도 있지만, 그것이 오늘날 어떻게 작동하는지는 아닙니다. – Xach

2

파이썬의 임포트에 비유하는 것은 시스템 정의입니다 ... 음, 이것은 매우 느슨한 비유이지만, 갈 길입니다. 시스템 정의에서 종속성을 선언 한 다음 소스 코드에서이 코드가 있다고 예상하면 나중에 외부 코드의 비트를 참조하면됩니다.

예 : 시스템 정의에서 당신은 할 수 있습니다 (보통은 my-program.asd 파일에있을 것입니다)

(defsystem :my-program 
    :version "0.0.1" 
    :serial t 
    :description "My program" 
    :components ((:file "some-source-file")) 
    ;; `some-external-package' here is the "import", i.e. here you 
    ;; declared that you will be using code from this package. 
    ;; ASDF will generally "know" how to get the code of that package 
    ;; from here on. But if it doesn't, then there are ways to "help it" 
    ;; similar to how in Python there's a procedure to prepare your local 
    ;; files to be used by easy_install 
    :depends-on (:some-external-package)) 

나중에 코드에서 방금 예를 들어, some-external-package이 프로그램에 사용할 수 있음을 가정

(some-external-package:exported-symbol) 

하면 효과가 있습니다. ("Your code"는 구성 요소에서 지정한 some-source-file.lisp입니다.)

당신이 where ASDF might find it *, 당신은 항공 자위대가 설치되어 가정 (당신의 리스프에 사용할 수, SBCL은 번들로 제공), 당신은 (asdf:load-system :my-program)를 사용하여이 시스템을로드하려는 장소에이 파일이 후이는 자위대 documentation on how to define systems

입니다 Explained here.

* -이

(push "/path/to/your/system/definition/" asdf:*central-registry*) 
관련 문제