返回介绍

12.16.5 交叉生成式 — rand join

发布于 2020-09-09 22:55:51 字数 828 浏览 947 评论 0 收藏 0

rand join生成式控制被用来随机地交叉两个或多个生成式序列而又能维持每一个序列的相对顺序。rand join生成式控制的语法如下:

rs_production_list ::=
    rs_prod {rs_prod}
  | rand join [(expression)] production_item production_item {production_item}

例如:

randsequence(TOP)
    TOP : rand join S1 S2;
    S1  : A B;
    S2  : C D;
endsequence

这个发生器会随机地产生下列的序列:

A B C D
A C B D
A C D B
C D A B
C A B D
C A D B

紧跟在rand join关键字之后的可选的表达式必须是位于0.0到1.0范围内的一个实数。这个表达式的值代表了被交叉的序列长度影响一个序列被选择概率的程度。序列的长度是在一个给定的时间没有交叉的生成式的数目。如果表达式为0.0,那么最短的序列具有较高的优先级;如果表达式为1.0,那么最长的序列被指定了优先级。例如,使用前面的例子:

TOP : rand join (0.0) S1 S2;

对序列A B C D C D A B给出了较高的优先级。

TOP : rand join (1.0) S1 S2;

给序列A C B D A C D B C A B D C A D B赋予了较高的优先级。

如果没有说明的话,发生器使用0.5作为缺省值,它不会对任何序列长度区分优先级。

在每一个步骤,发生器将非端接符号交叉成深度1。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文