2017-10-26 15 views
0
私はelispので遊んでてきたと私のコードで再び奇妙なバグが出ている

Elispでリストのインデックスを作成する際に問題が発生するのはなぜですか?

私は取得していますエラーは次のとおりです。

Debugger entered--Lisp error: (error "Bad bounding indices: 2, 3") 
    signal(error ("Bad bounding indices: 2, 3")) 
    error("%s" "Bad bounding indices: 2, 3") 
    subseq((quote (2 2 2 2)) 2 3) 
    (matrix-from-values 1 number-of-columns-on-output (subseq (nth 2 matrix) (+ (* row-index number-of-columns-on-input) start-column) (+ (* row-index number-of-columns-on-input) end-column))) 
    (let ((number-of-columns-on-input (nth 1 matrix)) (number-of-columns-on-output (- end-column start-column)) (row-index (- row 1))) (matrix-from-values 1 number-of-columns-on-output (subseq (nth 2 matrix) (+ (* row-index number-of-columns-on-input) start-column) (+ (* row-index number-of-columns-on-input) end-column)))) 
    matrix-extract-subrow((2 2 (quote (2 2 2 2))) 1 2 3) 
    [..more stuff..] 

それは私が正しくエラーを読んでいないよ可能性があります私はそれを理解しますが、通訳は私の機能を(評価「(マトリックス.. [何とか-何とか]」裏返しからのもの)と、上にトリップ:私は*スクラッチに入る場合は

subseq((quote (2 2 2 2)) 2 3) 

*バッファと実行:

(subseq (quote (2 2 2 2)) 2 3) 

それは、私はあなたがどこかを引用の余分な層を持っていると思うだけで罰金

+0

'subseq((quote(2 2 2 2))2 3)'は一形式ではなく、二つであることに注意してください。あなたは変数 'subseq'を持っていて、関数が'(quote(2 2 2 2)) 'と二つの引数' 2'と '3'の評価である関数呼び出しを持っています。 '(quote(2 2 2 2))'を評価することは疑問です。あなたに呼び出し可能な関数を与えるでしょう。 '(subseq(quote(2 2 2 2))2 3)'は 'subseq'を呼び出して、リストをdtwoの数値引数で呼び出す形式です。 – Sylwester

+0

ありがとう - それはなぜエラーが引数について話しているのかを説明します。ファーストブラッシュ時に誤解を招く – geokon

答えて

0

あなたは表現を混乱しています。ソースコードでは式を記述しますが、上記のデバッガの出力では値が表示されます。 evalは式を取り、対応する値を返しますが、quoteを使用して値を取得し、その値を返す(些細な)式に戻すことができます。

あなたがsubseq((quote (2 2 2 2)) 2 3)を見たときだから、subseqはあなたが(quote (quote (2 2 2 2)))ような式を評価することにより、例えば取得した値(quote (2 2 2 2))、と呼ばれていたことを意味します。

あなたはバックトレースの残りの部分を取り除いたが、多分あなたは本当に

... '(2 2 (2 2 2 2)) .. 

代わりにする必要があります

... '(2 2 '(2 2 2 2)) ... 

のようなどこかに何かを持っている、それはのように思える

matrix-extract-subrow((2 2 (quote (2 2 2 2))) 1 2 3) 

を見て。

+0

あなたのことを非常によく見守っていました!問題を指摘していただきありがとうございます。次回はすべてのトレースを含めることにしました(最初はここでは関係ないと思いました) 2番目の見積もりが不要な理由を説明できますか? 私は内部の表現を評価しようと心配しました。外側の引用符は、内部がすべて既に解釈されていることを本質的に保証していますか? – geokon

+0

引用符の中には値(つまり「データ」)があります。評価済みなので、何も評価されません。 – Stefan

0

を実行します。私はあなたが実行している実際のelispコードを見ることなく

(subseq (quote (quote (2 2 2 2))) 2 3) 

を評価する場合、私はあなたのエラーを再現することができ、それはエラー、それはより具体的に難しいときどのようにそれを呼び出しています。

+0

ありがとうございます。あなたは正しい。私は引用符が少し使われる方法を誤解しなければならない。私は次回全体のトレースを確実に含めるようにします。私はそれをより簡単にしようとしていましたが、問題を理解することが難しくなりました。 – geokon

関連する問題