基本的に、私がしようとしていることは、 list->vector
、vector->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は戻り値ではなくプロシージャとして解釈します。 私はこれを修正するためにさまざまなアプローチを試みましたが、私はいつも同様の結果に終わります。
フィードバックが高く評価されました。ありがとう!
ループ構造は大丈夫ですが、ソースの '(#(* newvector *))'部分ですか? (それは間違っています) – soegaard
@soegaard Nahは、任意の値のセットの単なるプレースホルダです。 –