2012-02-12 8 views
0
(defmethod! expand-t-setclass (pcset &optional (n 12)) 
    :icon *PC_ICON* 
    :doc " 
Given any member of a t-setclass, lists every member of that t-setclass. 
The optional parameter N can be used to set the number of equal steps per 
octave to something other than the default of 12. 

Will tolerate integers out of the mod-N range in PCSET." 
    :initvals '((1 3 4) 12) 
    :indoc '("pcset or list of them" 
      "modulus of the pc space") 
    (if (listp (first pcset)) 
    (expand-t-setclasses pcset) 
    (let ((t-prime (t-primeform pcset n))) 
     (loop with result = nil 
      repeat n 
      for x-pcset = pcset then (xpose x-pcset 1 n) 
      unless (member x-pcset result) collect x-pcset into result 
      finally return result)))) 


(defmethod! expand-t-setclasses (pcset &optional (n 12)) 
    (loop for item in pcset collect (expand-t-setclass item n))) 

;----- 

私は一般的にはLispのとあまり慣れていないよ、このエラーcasuesバグ発見しようとしています:Lispヘルプ|エラー:重複がLOOPに結合:(結果)

ERROR:重複がLOOPに結合:(結果を)

答えて

1

変数RESULTを導入するLOOPには、2つのフォームがあります。

WITH result = nil 

COLLECT ... INTO result 

どちら上記バインディング変数を作成します。

私は、アイテムをRESULTリストにプッシュするフォームでCOLLECTを置き換えます。

(loop with foo = nil 
     ... 
     (push item foo) 
     ... 
     finally (return (reverse foo))) 

(loop ... 
     collect item into foo 
     ... 
     finally (return foo)) 

あなたは別のエラーがあります:

FINALLY RETURN result 

LOOPの構文はそれをサポートしていませんが。最終的に複合フォームが期待されます。

はに交換してください:

FINALLY (return result) 

RETURNは、Common Lispの中に定義されたマクロです。

+0

返信いただきありがとうございます!私は他のどのような形をとっているのか知っていますか?私はまだ私の最初のエラーを正確に修正する方法があまりにも分かりません。 (これは、古いプログラムからのコードの古い部分であり、Iは、開発者に連絡することができない)私が入力しようとした –

+0

:FOO =ゼロ と (ループ;結果で除去 リピートN X-pcset = pcset、次いで? (member x-pcset result)(push x-pcset foo) finally(return(reverse foo))))) しかし、LOOPキーワードは(。 –

+0

私は単に "with foo = nil"を取り除いて収集を続けた場合、各ループでコンパイルすると毎回0で初期化されますか?ですから、私はその1行のコードを取り除いて問題を解決することができますか? –

関連する問題