将序列解构为词法变量

destructure sequence into lexical variables

我有一个元素数量已知的序列(来自 pcre 匹配项),我想将其映射到词法变量中。

我可能可以遍历序列并将每个元素放入堆栈,然后 :> ( a b c d ) 但是有没有一种惯用的方法可以做到这一点?

哦,我的序列有 4 个以上的元素,所以 first4 不会削减它,尽管我显然可以在序列的子集上使用 first4 然后 first3 .

如果您确定那是您真正想要做的,您可以使用 quotations.generalizations 中的 firstn:

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

但这听起来像是个坏主意。这很棘手,因为词法变量不是 "real" 变量,编译器将它们转换为堆栈洗牌。这就是为什么他们不能很好地使用宏并且 :> 不能像普通单词一样被调用。

如果使用动态变量会更简单:

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