1

私は Doug Hoyte と The Phoeron の let-over-lambda の例を使用して、common-lisp パッケージ、quicklisp と asdf、および Common Lisp で大規模にプログラミングするための製品レベルの専門的な実践についての理解を同時に深めています。

以下に示す方法でパッケージを使用できますが、同様の部分的にガイドされた推測を使用してテストを実行する方法をまだ理解していません. 詳細は次のとおりです。

ここでコードを見つけました: https://github.com/thephoeron/let-over-lambda私は「消防ホース」と「漸進的に教育された当て推量」のアプローチを使用して、これをトレイルガイドとして使用して、できるだけ早く頭に詰め込みます。もちろん、このアプローチでは、より構造化されたアプローチよりも多くのあいまいな知識が途中で残されますが、より早く山頂にたどり着く可能性があります (この概念について私を誤解させてください)。

私の現在の初歩的なレベルの理解では、自分のコードでパッケージを使用できます。たとえば、私は書くことができます

(load "~/quickload/setup.lisp") (ql:quickload "let-over-lambda") (let-overlambda:flatten '((a . b) c (d e)))

そして得る

(A B C D E)

「package.lisp」lolの を読むと、パッケージがニックネーム を定義していることがわかります。つまり、(省略形):defpackage

(defpackage #:let-over-lambda (:nicknames #:lol) (:use #:cl #:cl-user #:cl-ppcre)

次のニックネームを使用できます。

(lol:flatten '((a . b) c (d e)))
=> (A B C D E)

さらに、そのエクスポートをインポートして、シンボルを修飾する必要をなくします:

(use:package :lol)
(flatten '((a . b) c (d e)))
=> (A B C D E)

ここで、レポに興味をそそるテスト パッケージとディレクトリ "t" が含まれていることに気付きました。

-rw-r--r-- 1 921 Dec 5 05:27 let-over-lambda-test.asd -rw-r--r-- 1 941 Dec 5 05:27 let-over-lambda.asd -rw-r--r-- 1 17421 Dec 5 05:27 let-over-lambda.lisp -rw-r--r-- 1 1771 Dec 5 05:27 package.lisp drwxr-xr-x 3 102 Dec 5 05:27 t

ただし、テストの実行方法がわかりませんでした。それが私の質問です。どうすればよいのでしょうか? 以下は、私が sbcl 1.3.1 で試みたがうまくいかなかったもののいくつかです:

* (ql:quickload "let-over-lambda-test")

debugger invoked on a QUICKLISP-CLIENT:SYSTEM-NOT-FOUND in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
  System "let-over-lambda-test" not found

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [CONTINUE] Try again
  1: [ABORT   ] Give up on "let-over-lambda-test"
  2:            Exit debugger, returning to top level.

((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "let-over-lambda-test")
0] 

この

* (load "./t/let-over-lambda.lisp")
While evaluating the form starting at line 3, column 0
  of #P"/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp":

debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
  The name "PROVE" does not designate any package.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY   ] Retry EVAL of current toplevel form.
  1: [CONTINUE] Ignore error and continue loading file "/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp".
  2: [ABORT   ] Abort loading file "/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp".
  3:            Exit debugger, returning to top level.

(SB-INT:%FIND-PACKAGE-OR-LOSE "PROVE")
0] 

編集:次のように「証明」をクイックロードすると、環境にさらに多くのクールなものがロードされましたが、テストの実行方法がわからないままでした。「prove」は「let-over-lambda-test」の依存関係として自動的にクイックロードされると思っていたdefsystemので、これはちょっとした驚きでした:

* (ql:quickload "prove")
To load "prove":
  Load 2 ASDF systems:
    alexandria cl-ppcre
  Install 5 Quicklisp releases:
    anaphora cl-ansi-text cl-colors let-plus prove
; Fetching #<URL "http://beta.quicklisp.org/archive/anaphora/2011-06-19/anaphora-0.9.4.tgz">
; 5.02KB
==================================================
5,136 bytes in 0.00 seconds (5015.63KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/let-plus/2013-12-11/let-plus-20131211-git.tgz">
; 10.52KB
==================================================
10,768 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-colors/2015-03-02/cl-colors-20150302-git.tgz">
; 14.11KB
==================================================
14,449 bytes in 0.06 seconds (220.47KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-ansi-text/2015-08-04/cl-ansi-text-20150804-git.tgz">
; 5.74KB
==================================================
5,876 bytes in 0.00 seconds (5738.28KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/prove/2015-08-04/prove-20150804-git.tgz">
; 854.08KB
==================================================
874,578 bytes in 3.35 seconds (254.95KB/sec)
; Loading "prove"
[package alexandria.0.dev]........................
..................................................
[package anaphora]................................
[package anaphora-basic]..........................
[package anaphora-symbol].........................
[package let-plus]................................
[package cl-colors]...............................
[package cl-ansi-text]............................
[package prove.output]............................
[package prove.report]............................
[package prove.reporter]..........................
[package prove.asdf]..............................
[package prove.suite].............................
[package prove.test]..............................
[package prove.color].............................
[package prove]...................................
[package prove.reporter.tap]......................
[package prove.reporter.fiveam]...................
[package prove.reporter.list].....................
[package prove.reporter.dot].
("prove")
* (ql:quickload "let-over-lambda-test")

debugger invoked on a QUICKLISP-CLIENT:SYSTEM-NOT-FOUND in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
  System "let-over-lambda-test" not found

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [CONTINUE] Try again
  1: [ABORT   ] Give up on "let-over-lambda-test"
  2:            Exit debugger, returning to top level.

((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "let-over-lambda-test")
0] 2

ご指導いただければ幸いです。

4

1 に答える 1

3

ASDF test-op が定義されているため、評価しています

(asdf:test-system #:let-over-lambda)

トリックを行う必要があります。最初に let-over-lambda-test システムをロードする必要がある場合があります。

于 2015-12-13T03:57:30.720 に答える