последовательность деструктуры в лексические переменные - PullRequest
1 голос
/ 01 апреля 2019

У меня есть последовательность с известным количеством элементов (из совпадения в pcre), и я хотел бы отобразить это в лексических переменных.

Я, вероятно, могу перебрать последовательность и поместить каждый элемент в стек, а затем :> ( a b c d ), но есть ли идиоматический способ сделать это?

О, и моя последовательность содержит более 4 элементовпоэтому first4 не обрезает его, хотя я, очевидно, мог бы использовать first4, а затем first3 в подмножестве последовательности.

1 Ответ

0 голосов
/ 11 апреля 2019

Если вы уверены, что действительно хотите этого, вы можете использовать firstn из 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 . . . . . . . .  ]

Но это звучит как плохая идея. Это сложно, потому что лексические переменные не являются «реальными» переменными, компилятор преобразует их в перемешивание стека. Вот почему они плохо играют с макросами, и :> нельзя назвать обычным словом.

Если вы используете динамические переменные, это проще:

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
...