Practical Common Lisp で作業しようとしています。私はリスプ初心者です。
「quicklisp」を使用してパッケージを定義しました。パッケージをロードします (ql:quickload :spam filter)
このパッケージの関数の 1 つは次のようになります。
(defun increment-count (feature type)
(ecase type
(ham (incf (ham-count feature)))
(spam (incf (spam-count feature)))))
この関数を呼び出す関数をスライムで呼び出そうとすると、case ステートメントが失敗します。コンパイラがパッケージ名をプレフィックスとして句に追加したため、失敗したと思います。
これが私が見ているエラーです:
HAM は ECASE 式で落ちました。(HAM SPAM) の 1 つを求めていました。【タイプSB-KERNELの状態:CASE-FAILURE】
再起動: 0: [RETRY] SLIME REPL 評価リクエストを再試行します。1: [*ABORT] SLIME のトップ レベルに戻ります。2: [ABORT] スレッドの中止 (#)
バックトレース: 0: (SB-KERNEL:CASE-FAILURE ECASE HAM (SPAMFILTER::HAM SPAMFILTER::SPAM)) 1: (SPAMFILTER:INCREMENT-COUNT # HAM) 2: (SPAMFILTER:TRAIN "From exmh-users-admin@ redhat.com Mon Sep 23 12:06:27 2002 ..) 3: (SPAMFILTER::TRAIN-FROM-CORPUS #>((#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/1205. f9d66868c52039f7a147d9e2b4b05e1f" HAM) (#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/0090.314ec4268af7a3a1974d5e.. 4: (SPAMFILTER:TEST-CLASSIFIER #((#P"/Users/jh/src/lisp/ spamfilter/mail/easy_ham/0001.ea7e79d3153e7469e7a9c3e0af6a357e" HAM) (#P"/Users/jh/src/lisp/spamfilter/mail/easy_ham/0002.b3120c4bcbf3101e661161ee7.. 5: (SB-INT:SIMPLE-EVAL-IN-LEXENV) (SPAMFILTER:TEST-CLASSIFIER SPAMFILTER: CORPUS 0.1) #) 6: (EVAL (SPAMFILTER:TEST-CLASSIFIER SPAMFILTER:コーパス0.1)) --詳細--
私は、コンパイラが Backtrace 0 にプレフィックスを追加したという私の推測に基づいています。
0: (SB-KERNEL:CASE-FAILURE ECASE HAM (SPAMFILTER::HAM SPAMFILTER::SPAM))
明らかな何かが欠けていると確信しています。
ありがとう。