1

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

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

哦,我的序列有超过 4 个元素,所以first4没有删减它,尽管我显然可以使用first4然后first3在序列的一个子集上。

4

1 回答 1

0

如果您确定这是您真正想做的事情,您可以使用firstnfrom 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
于 2019-04-11T00:45:33.973 回答