SRFI-25は多次元配列を扱うSRFIです。多次元配列自体はリストでもベクタでも表現できますが、このSRFIは2次元以上の配列の扱いをより自然にすることを目的としています。
使い方を見てみましょう。
(import (srfi :25)) ;; create 3 dimension array, each dimension ;; contains bound start with 0 and end with 4 ;; (exclusive) (define arr (make-array (shape 0 4 0 4 0 4))) ;; set 'e1 on position x = 2, y = 2, z = 2 (array-set! arr 2 2 2 'e1) ;; -> unspecified value ;; ref it (array-ref arr 2 2 2) ;; -> e1 ;; returns dimensions of array (array-rank arr) ;; -> 3ベクタやリストを使うとアクセスが複雑になるところが、より直感的に操作可能になります。
もう少し複雑な例を見てみましょう。手続き
shape
は配列境界のペアを受け取ります。例えば以下のように書けば0以外の数字から始まる配列も書くことが可能です。(配列が3次元を超えるを僕の理解の範疇を超えてくるので2次元で・・・)
;;; first dimension has 2 elements start with 4 end with 5 ;;; second dimension has also 2 elements start with 5 end with 6 ;;; the array is initialised with given objects as following ;;; 5 6 ;;; 4 nw ne ;;; 5 sw se (array (shape 4 6 5 7) 'nw 'ne 'sw 'se)このSRFI自体には含まれないのですが、このSRFIの著者は
arlib.scm
をSRFIに付随させており、その中にはtubulate-array
やarray-equal?
といった便利手続きが定義されています。(なんでSRFI自体には含めなかったんだろう?)今回はSRFI-25を紹介しました。
No comments:
Post a Comment