3

Common Lisp では、quicklisp が人気のあるライブラリ管理ツールです。そのツールを使用し、CL-WHO を使用してみます。私は SBCL 1.0.57 実装を使用しています。以下で私自身の質問に答えます。

初心者にとって、ASDF と quicklisp が実際にどのように連携するかは明確ではありません。そのため、quicklisp からダウンロードしたパッケージやライブラリを外部ソース ファイルで実際に使用する方法が明確ではありません。少なくとも現時点では、quicklisp FAQ は役に立ちません。Python では、信じられないほど簡単です。CL+quicklisp に相当するものはありますか?

検索するとたくさん出てきます。私が見つけた最も関連性の高いもののいくつかを次に示します。

Lisp インポート/ロード ファイル

quicklisp によってインストールされたパッケージを使用するには?

最初にこれらを読んでいたとき、少なくとも 1 つの疑問が頭に浮かびました。Quicklisp は、より高度な管理ツールのようです。他の人は、quickproject の使用を提案しています。しかし、それは本当に必要ですか?

4

2 に答える 2

2

Python のインポートとの類似点はシステム定義です...まあ、これは非常に大雑把な類似性ですが、それが進むべき道です。システム定義で依存関係を宣言し、ソース コードでそれが存在することを期待するので、後で外部コードのビットを参照する場合は、それを行うだけです。

例えば。あなたが持っているかもしれないシステム定義で:(通常、それは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)

動作するはずです。(「あなたのコード」は、コンポーネントで指定した some-source-file.lisp です)。

これは、システムの定義方法に関する ASDFドキュメントです。

このファイルをASDF が見つける可能性のある場所に配置した後*、ASDF がインストールされていると仮定すると (Lisp で利用可能で、SBCL がバンドルされています)、(asdf:load-system :my-program) Explained here を使用してこのシステムをロードします。

* - それをテストする簡単な方法は、

(push "/path/to/your/system/definition/" asdf:*central-registry*)
于 2013-03-09T16:52:47.660 に答える
0

quicklispページの手順からcl-whoをダウンロードし、これを実行します。

#!/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")))))

初心者、または本当に怠惰な人にとっては、(Pythonのように)1行ではなく3行を先頭に書く必要がある理由はありません。

于 2013-03-08T21:28:37.693 に答える