destructure sequence into lexical variables

68 Views Asked by At

I have a sequence with a known number of elements (from a pcre match) and would like to map this into lexical variables.

I can probably loop over the sequence and put every element onto the stack and then :> ( a b c d ) but is there an idiomatic way to do this ?

Oh and my sequence has more than 4 elements, so first4 doesn't cut it, although I could obviously use first4 and then first3 on a subset of the sequence.

1

There are 1 best solutions below

0
On BEST ANSWER

If you are sure that's want you really want to do, you could use firstn from quotations.generalizations:

SYMBOLS: a b c d e f g h ;

[let
 { 1 2 3 4 5 6 7 8 }
 8 firstn :> ( a b c d e f g h )

 a b c d e f g h . . . . . . . .  ]

But it sounds like a bad idea. It's tricky, because the lexical variables are not "real" variables, the compiler converts them into stack shuffling. That's why they don't play nice with macros and :> can't be called like a regular word.

If you use dynamic variables it's easier:

SYMBOLS: a b c d e f g h ;

 { 1 2 3 4 5 6 7 8 }
 { a b c d e f g h } [ set ] 2each

 { a b c d e f g h } [ get . ] each