我有一个具有已知数量元素的序列(来自 pcre 匹配),并希望将其映射到词法变量中。
我可能可以遍历序列并将每个元素放入堆栈然后:> ( a b c d )
但是有没有一种惯用的方法来做到这一点?
哦,我的序列有超过 4 个元素,所以first4
没有删减它,尽管我显然可以使用first4
然后first3
在序列的一个子集上。
我有一个具有已知数量元素的序列(来自 pcre 匹配),并希望将其映射到词法变量中。
我可能可以遍历序列并将每个元素放入堆栈然后:> ( a b c d )
但是有没有一种惯用的方法来做到这一点?
哦,我的序列有超过 4 个元素,所以first4
没有删减它,尽管我显然可以使用first4
然后first3
在序列的一个子集上。
如果您确定这是您真正想做的事情,您可以使用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 . . . . . . . . ]
但这听起来是个坏主意。这很棘手,因为词法变量不是“真实”变量,编译器会将它们转换为堆栈混洗。这就是为什么它们不能很好地使用宏并且:>
不能像普通单词一样被调用。
如果您使用动态变量,则更容易:
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