6

Let's say that I create a vector/array in Scheme:

(let* ((x #(1 2 3)))
  (list-ref x 0)) ; returns error 

What syntax or function can I use in the place of that list-ref to get 1?

EDIT: I'm using Script-Fu with GIMP 2.8, where array-ref doesn't seem to work.

4

2 に答える 2

9

(define v '#(1 2 3))は、新しいvectorを作成するための省略表現です。標準のスキームでは、これと同等です。

(define v (list->vector '(1 2 3)))

またはこれ:

(define v (make-vector 3))
(vector-set! v 0 1)
(vector-set! v 1 2)
(vector-set! v 2 3)

ベクトルが作成されたら (上記の手順のいずれかを使用して)、ベクトル内の要素にアクセスする正しい方法は、vector-ref手順を呼び出すことです。これは明らかに、要素のリストではなくベクトルであるためです。

(vector-ref v 0)

前の式では、要素を取得するvベクトルとインデックスです。上記の手順の詳細については、ドキュメント0を参照してください。

于 2012-06-22T21:10:19.560 に答える
4

vector-refこの目的で使用できます。例えば:

(vector-ref x 0)

詳細については、R 5 RS 仕様のベクトルに関するセクションへのリンクを参照してください。

于 2012-06-22T20:40:13.340 に答える