我有一个已知数目的元素的序列(来自pcre匹配),并希望将其映射到词法变量中。
我可能可以遍历序列并将每个元素放到堆栈上,然后:> ( a b c d )
,但是有惯用的方法吗?
哦,我的序列有4个以上的元素,所以first4
不会删减,尽管我显然可以在序列的一个子集上使用first4
然后使用first3
。 / p>
答案 0 :(得分:0)
如果确定确实要执行此操作,则可以使用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