- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import shapeless.nat. _0 _10 _12 _14 _16 _18 _2 _21 _3 _5 _7 _9 -6ren">
给定:
scala> import shapeless.nat.
_0 _10 _12 _14 _16 _18 _2 _21 _3 _5 _7 _9 natOps
_1 _11 _13 _15 _17 _19 _20 _22 _4 _6 _8 apply toInt
scala> import shapeless.ops.nat._
import shapeless.ops.nat._
超过 3 分钟后,以下代码尚未编译/运行。这是为什么?
scala> Sum[_22, _22]
另外,看看上面的 REPL 自动完成,_44
是否存在于无形中?
最佳答案
让我们从一个较小的数字开始。当您询问Sum[_4, _4]
时,编译器将去寻找一个实例,它会找到 these two methods :
implicit def sum1[B <: Nat]: Aux[_0, B, B] = new Sum[_0, B] { type Out = B }
implicit def sum2[A <: Nat, B <: Nat](implicit
sum: Sum[A, Succ[B]]
): Aux[Succ[A], B, sum.Out] = new Sum[Succ[A], B] { type Out = sum.Out }
第一个显然已经过时了 _4
不是_0
。它知道_4
与 Succ[_3]
相同(稍后会详细介绍),因此它将尝试 sum2
与 A
如_3
和B
如_4
.
这意味着我们需要找到 Sum[_3, _5]
实例。 sum1
由于与之前类似的原因而被淘汰,所以我们尝试 sum2
再次,这次是 A = _2
和B = _5
,这意味着我们需要 Sum[_2, _6]
,这让我们回到sum2
,与 A = _1
和B = _6
,这让我们寻找 Sum[_1, _7]
。这是我们最后一次使用sum2
,与 A = _0
和B = _7
。这次我们去寻找Sum[_0, _8]
我们会点击sum1
我们就完成了。
很明显,对于 n + n
我们要做n + 1
隐式搜索,并且在每次搜索期间,编译器将进行类型相等性检查和其他需要遍历 Nat
结构的内容(更新:请参阅 Miles 的回答以了解这里最大问题是什么)类型,所以我们正处于指数领域。编译器实际上并不是为了有效地处理这样的类型而设计的,这意味着即使对于很小的数字,此操作也将花费很长时间。
我不太清楚为什么 sum2
不是这样定义的:
implicit def sum2[A <: Nat, B <: Nat](implicit
sum: Sum[A, B]
): Aux[Succ[A], B, Succ[sum.Out]] = new Sum[Succ[A], B] { type Out = Succ[sum.Out] }
这要快得多,至少在我的机器上,其中 Sum[_18, _18]
编译只需四秒,而不是七分钟并且还在计数。
这似乎不是 Typelevel Scala 的 -Yinduction-heuristics
的情况有帮助 - 我刚刚尝试使用 @inductive
编译 Shapeless Sum
上的注释而且看起来仍然和没有它时一样慢得可怕。
_1
, _2
, _3
类型别名在 this boilerplate generator 生成的代码中定义在 Shapeless 中,它被配置为仅生成最多 22 的值。具体而言,在本例中,这是一个完全任意的限制。例如,我们可以编写以下内容:
type _23 = Succ[_22]
我们做了与代码生成器完全相同的事情,但更进一步。
Shapeless 的 _N
并不重要。不过,别名到 22 就停止了,因为它们只是别名。关于 Nat
的重要之处是它的结构,这与我们可能为它起的任何好听的名字无关。即使Shapeless没有提供任何_N
即使没有别名,我们仍然可以编写这样的代码:
import shapeless.Succ, shapeless.nat._0, shapeless.ops.nat.Sum
Sum[Succ[Succ[_0]], Succ[Succ[_0]]]
这与写 Sum[_2, _2]
完全相同,只是打字比较烦人。
所以当你写Sum[_22, _22]
时编译器在表示结果类型时不会遇到任何问题(即 Succ
周围的 44 _0
),即使它没有 _44
。输入别名。
关于scala - 求和 "Large"Nat 的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406467/
matplotlibrc 示例文件指出: ## The font.size property is the default font size for text, given in pts. ## 1
在 HTML/CSS 中,可以通过以下方式指定字体大小(已弃用,但所有浏览器都支持): text n 是 {1, 2, 3, 4, 5, 6, 7} 的一个元素。 另一种可能性是: text s 是
我正在编写物理模拟代码,最近我遇到了异常结果。我设法调试了我的程序,错误出在用大整数除以大 double ,形式如下: cout << my_large_double/my_large_int <<
由于“大”是一个相对术语,我想知道“大”的确切含义是什么。更具体地说,我想在数据库中存储从几个字节到 50 个字节的二进制数据,并且想知道是否应该使用 Blob 或其他数据类型。 最佳答案 所有 DB
这是我的代码的想法: 我有一个很大的电子邮件数据 RDD,称为 email。大约 7 亿封电子邮件。它看起来像这样: [['value1','value2','value3','value4'],['
我需要拆分由另一个 Pig 脚本生成的输出部分文件,并生成每个包含 1000 行的组。这些组将发布到网络服务以供进一步处理。数据之间没有关系,所以我无法将数据分组到特定字段。 我如何在 Pig 中执行
它们都有 2vcpu 和 8G 内存。但对于 t2.large,您只能使用单个 vcpu 的 60%,两个 vcpu 平均各使用 30%。即使考虑到“CPU积分”,t2.large似乎也比m4.lar
我正在尝试使用 git svn 克隆一个大型 svn 存储库。 repo 有 100000 次修订。大小约为 9GB(原始文件夹)。 repo 协议(protocol)中的最大文件是 300 MB。
我刚接触 android。在我的教程书中(有点过时)在Eclipse中教学,只是在layout-large目录下编写另一个layout xml文件以适配大屏。 我使用的是android studio,
如果我要升级亚马逊实例,我会创建镜像的快照并从该镜像创建新实例,然后升级该实例。 我的问题与 mongodb 以及从 m1.large 升级到 m3.large 实例的最佳方式有关 - 基本上 m3
这个问题可能需要一些编译器知识才能回答。我目前正在做一个项目,我将在其中创建一个数组,可能是 int[2][veryLargeNumber] 或 int [veryLargeNumber][2] 逻辑
我在使用 mysql 5.5.12 时遇到了 Amazon RDS 的 IO 性能问题。有 2 种实例类型相似且价格接近: 超大数据库实例:15 GB 内存、8 个 ECU(4 个虚拟核心,每个 2
我需要设计一个包含大量字段的网页,每个字段都显示在一行表格中。有几个类别。我希望为每个类别制作一个单独的表格并进行不同的设计。 网页上存在大量表格是否会使速度变慢?哪个更好.. 有 10 个表,每个表
我在my.cnf中添加了如下内容 [mysqld] max_allowed_packet=32M [mysql] max_allowed_packet=32M 而且我还在 JDBC 查询中添加了以下内
我正在为 Nexus 4、Samsung 7.7、Nexus 7、S3 和 Note-2 开发应用程序。我正在为所有这些布局制作一个 apk。除 Nexus 7 和 Samsung 7.7 外,其他一
我有一个包含大约 1000 万行且大小约为 400mb 的文件,我的系统无法处理它。当我尝试使用 gedit 打开文件时,它卡住了。有没有办法处理这么大的数据文件。 最佳答案 使用 gnu(Windo
这个问题已经有答案了: "Integer too large" for a small compile time constant (4 个回答) 已关闭 6 年前。 当我添加整数时,即使我将其加倍,
这个问题已经有答案了: "Integer number too large" error message for 600851475143 (8 个回答) Java long number too l
我们正在开发一个注册系统,但现在由于编译期间出现内存错误而陷入困境。 我们上网查了一下,发现错误信息的原因是.java文件的大小。我们的 EnrollmentSystem 类现在有 10171 行代码
这个问题已经有答案了: How to import large sql file in phpmyadmin (23 个回答) 已关闭 4 年前。 我刚刚在 Digital Ocean 上设置了一个
我是一名优秀的程序员,十分优秀!