2017-03-19 9 views
0

基本的に、私がしようとしていることは、 list->vectorvector->listまたはappendを使用しない与えられたベクトルとリストが与えられた新しいベクトルを作成するには、list-> vectorまたはvector-> listを使用せずに

(list->vector (append (vector->list v) lst)) 

。次のように私の現在の実装である :

(let* ([vlen (vector-length v)] [len (+ vlen [length lst])] [new-vec (make-vector len)]) 
    (let loop ([i 0]) (
     (cond [(= i len) new-vec] 
       [(>= i vlen) 
        (vector-set! new-vec i [list-ref lst [- i vlen]]) 
        (loop [add1 i])] 
       [else 
        (vector-set! new-vec i [vector-ref v i]) 
        (loop [add1 i])])))) 

でも、私はこの例外を取得しています:ここ

Exception: attempt to apply non-procedure #(*newvector*) 
Type (debug) to enter the debugger. 

newvectorは後に返されることになっている新しいベクトル内の値のセットですリストはベクトルに「追加」されています。

ループが実際に再帰して新しいベクトルをスタックに戻そうとしているため、この例外が発生する理由はわかります。したがって、新しいベクトルが作成された後にどこかで起こります:

   ...... 
        (vector-set! new-vec i [....]) 
        (#(*newvector*))] 
       ...... 

したがって、Schemeは戻り値ではなくプロシージャとして解釈します。 私はこれを修正するためにさまざまなアプローチを試みましたが、私はいつも同様の結果に終わります。

フィードバックが高く評価されました。ありがとう!

+0

ループ構造は大丈夫ですが、ソースの '(#(* newvector *))'部分ですか? (それは間違っています) – soegaard

+0

@soegaard Nahは、任意の値のセットの単なるプレースホルダです。 –

答えて

0

使用SRFIから43

+0

残念ながら、これは割り当てのためのものであり、講師はChez Scheme R5RSのみを使用します。 –

0

をベクトル追加さてさて、私はまだ正確に私の最初の実装で間違っていたかわからないんだけど、私の名前をチャンクして動作するようです2つのヘルパー・メソッドにアップしてみましょう:

(define (vector-append-list v lst) 
    ;(list->vector (append (vector->list v) lst)) 
    (let* ([vlen (vector-length v)] [len (+ vlen [length lst])] [new-vec (make-vector len)]) 
     [copy-from-vec v new-vec] 
     [copy-from-list lst new-vec [vector-length v]] 
    ) 
) 

(define (copy-from-vec v nv) 
    (if (zero? [vector-length v]) 
     nv 
     (let loop ([i 0]) 
      (vector-set! nv i [vector-ref v i]) 
      (if (= (add1 i) [vector-length v]) 
       nv 
       [loop (add1 i)])) 
)) 

(define (copy-from-list lst nv vlen) 
    (if (zero? [length lst]) 
     nv 
     (let loop ([i 0]) 
      (vector-set! nv [+ i vlen] [list-ref lst i]) 
      (if (= (add1 i) [length lst]) 
       nv 
       [loop (add1 i)])) 
)) 
関連する問題