gpt4 book ai didi

shapeless - 了解半熟 2's ' ~' 组合器

转载 作者:行者123 更新时间:2023-12-04 19:04:31 27 4
gpt4 key购买 nike

查看parboiled2部分,规则组合器和修饰符:

enter image description here

我不明白aba ~ b图表。

到目前为止,我发现文档很简单。但是在这里有点迷失。

您能解释一下每个 block 吗?

最佳答案

这是规则的定义:

class Rule[-I <: HList, +O <: HList]

您链接的文档提供了更多解释,但本质上 I 是规则的输入,O 是规则的输出。冒号符号可能有点令人困惑。 parboiled2 使用堆栈来管理状态。只需记住,冒号列表 (HList) 中的类型是从左到右生成/推送,并从右到左消耗/弹出的。在 HList A:B:C 中,C 位于堆栈顶部,必须首先被消耗。

~ 运行一个规则,然后运行下一个规则。因此,在第一个示例中,Rule[, A] 类型的 a 不消耗任何内容并“生成”一个 A,而 b Rule[, B] 类型的 code> 不消耗任何内容并“生成”一个 B。那么这是有道理的,如果您运行 a 后跟 b,您将生成一个 A 后跟一个 B >。结果类型为 Rule[, A:B]

当您添加输入时,事情会变得更加复杂。您需要确保 a(或无论第一个规则是什么)生成的类型是 b 将使用的类型。 ~ 就像函数组合一样。如果我们想组合 gf 得到 g 。 f,我们需要确保f的输出与g的输入类型相同。

让我们看一下表中的第三个示例。

  • a 的类型为 Rule[A, B:C]
  • b 的类型为 Rule[D:B:C, E:F]

当我们运行 a 时,会从堆栈中消耗 A,将 B 添加到堆栈中,然后将 C 添加到堆栈中。 被添加到堆栈中。然后运行b,首先消耗C,然后消耗B,最后消耗D堆。为了在正确的时间出现在正确的地点,D 需要位于 a 消耗的 A 之下。 b 然后会产生一个 E,然后是一个 F

我们总共消耗了一个 D 和一个 ABC 不算数,因为它们是在规则内部生成和消耗的。消耗完 DA 后,我们将 EF 留在堆栈上。所以,a ~ b的类型是Rule[D:A, E:F]

自述文件中的第四个示例给出了一个示例,其中 ab 生成了错误的类型以供使用。在这种情况下,a ~ b 是非法的。

关于shapeless - 了解半熟 2's ' ~' 组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com