Yesterday, Neil Toronto wrote: > > I wouldn't want to write that, either. Right now, you'd write > > (array > #[#[(list (1- i) (1- j)) (list i (1- j)) (list (1+ i) (1- j))] > #[(list (1- i) j ) (list i j ) (list (1+ i) j )] > #[(list (1- i) (1+ j)) (list i (1+ j)) (list (1+ i) (1+ j))]]) > > The vector syntax just delimits rows; it never quotes.
OK, so it's like the `array*' I suggested later, right? If that's the more useful use case, then it probably makes sense to have `array' do it. (It should be clear in the docs, of course.) BTW, I didn't realize that this is a syntax that construct something completely different. What happens when I want to have a plain vector as a value? Forcing me to use `vector' for that seem a bit odd. > Square parens aren't required, but make rows easier to distinguish. (I don't care much -- I just stuck to #()s to stress the fact that they shouldn't matter.) > Arrays' custom printers print square parens, which gives feedback > when a user is confused about whether #(...) means a row or a > vector-valued element. Related to the above BTW -- if I can't write vector literals in code, then it's probably a bad idea to show them in your printed representation. > Quotes and quasiquotes stop the `array' macro's recursion into rows, > so quotes always mean "this is an element". For example, this is a > zero-dimensional array that contains a vector: > > (array '#(0 1 2 3)) Ah. Sneaky. Especially since (IIUC) in `#(... ,(blah) ...) the blah part isn't done either. More concretely, the 2 in #[1 `,2 3], which might be a result of some macro. -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________ Racket Developers list: http://lists.racket-lang.org/dev