haskell - 声明组在上下文单态限制中是什么意思?
解决方案
想象一个程序
foo x =
let f n = g (n-1)
g n = f (n-2)
h n = 42*n
in
f (h x)
在这里f
并g
形成一组最小的相互依赖的绑定。
它们不依赖于h
,也不h
依赖于它们中的任何一个。所以我们可以将其重写为
foo x =
let h n = 42*n in
let f n = g (n-1)
g n = f (n-2)
in
f (h x)
但是我们不能分解f
和g
——他们必须一起去,因为他们每个人都指着另一个人。
这里,bothf
和g
binding 都是函数绑定,所以它们是unrestricted,但是如果我们g = \n -> f (n-2)
有,这意味着's 绑定是一个g
简单的模式绑定,并且两者 都会受到单态限制。f
g
我们可以说h, f, g
是一组绑定,但它不是最小的,因为我们可以h
从那个组中取出。只有当我们不能再取出任何名字时,我们才有最小(即最小的)组。所以如果我们重写g = \n -> f (n-2)
,g
就变成了简单的模式绑定,变成了受约束,和f
它一起受约束,即使f
'bindind 是一个函数绑定。但h
仍然不受影响。
推荐阅读
- python - Pytorch 自定义优化器得到一个空的参数列表
- algorithm - 如何找到任意数量的最短路径?
- python - Python __init__.py 以便可以在没有'from'关键字的情况下导入包
- c# - Foreach 循环无法按预期工作以获取本周的数据
- python - 列表理解中单个列表上的几个循环
- java - 一旦我们单击 web 视图中的视频,我想使用动作视图。我在其中使用哪种方法的动作视图?
- python - 绘制时间数据框
- python - 如何匹配这个 Python 正则表达式中的单词或句子?
- html - 如何使弹性项目扩展到每行最多 4 个元素的可用宽度?
- javascript - isoWeek 和 week 有什么区别?