Did you have a look at the excellent `math/array' library? Its arrays are immutable by default.
Vincent At Fri, 7 Feb 2014 08:22:22 +0900, 亀田馬志 wrote: > > Hello. I have a problem around how to use syntax-case. > > Here's a situation. > I'm using SRFI-25, the array library. It is useful; however, it doesn't > provide something like "copy-array". I would not like to use something > "destructive", therefor I would like to make a copy of an array I defined. > > I noticed I could make a copy if I use "array" function provided there. > Here is its format: > > (array shape obj ...) > > I mean, in order to make a copy of an array, the idea must be > > (array (array-shape the-original) obj ...) > > ;however, I wondered how I should express "obj ..." part. The supplement of > SRFI25, or arlib.scm, provides array->list function, so I noticed I've got > to use a macro like this in the Common Lisp style. > > (defmacro copy-array (arr) > `(array (array-shape arr) ,@(array->list arr))) > > At first, I checked Racket reference and I tried (require > compatibility/defmacro). > > > (require srfi/25 racket/include compatibility/defmacro) > > (include "arlib.scm") > > (define-macro (copy-array arr) > `(array (array-shape arr) ,@(array->list arr))) > > (define a (array (shape 0 3 0 3) 1 2 3 4 5 6 7 8 9)) > > (define b (copy-array a)) > . . array->list: undefined; > cannot reference an identifier before its definition > phase: 1 > explanation: cannot access the run-time definition > > Strangely, even though I'd included "arlib.scm", the interpreter said > array->list was undefined. > So it might be the time(actually the first time to me) to use syntax-case. > Through some basic tutorials around syntax-case, the syntax-case macro > equivalent to the macro written in Common Lisp style stated above must be > something like this, I believe: > > (define-syntax copy-array > (lambda (stx) > (syntax-case stx () > ((_ arr) > #`(array (array-shape arr) #,@(array->list (syntax->datum > #'arr))))))) > > I tried: > > > (define b (copy-array a)) > . . array->list: undefined; > cannot reference an identifier before its definition > phase: 1 > explanation: cannot access the run-time definition > > array->list is "undefined" again. > What happens in the syntax-case here? > > Thanx. ____________________ Racket Users list: http://lists.racket-lang.org/users

