- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读 Haskell 相关的东西时,我有时会遇到“打结”这个表达,我想我理解它的作用,但不理解它的作用。
那么,对于这个概念有什么好的、基本的、简单易懂的解释吗?
最佳答案
打结是循环数据结构问题的解决方案。在命令式语言中,您可以通过首先创建一个非循环结构来构建循环结构,然后返回并修复指针以添加循环性。
假设您想要一个包含元素“0”和“1”的二元素循环列表。这似乎是不可能构造的,因为如果您创建“1”节点,然后创建“0”节点来指向它,那么您就无法返回并修复“1”节点以指向“0”节点。因此,您遇到了先有鸡还是先有蛋的情况,两个节点都需要先存在才能创建。
以下是在 Haskell 中的操作方法。考虑以下值:
alternates = x where
x = 0 : y
y = 1 : x
在非惰性语言中,由于未终止的递归,这将是一个无限循环。但在 Haskell 中,惰性求值做了正确的事情:它生成一个二元素循环列表。
要了解它在实践中如何工作,请考虑运行时会发生什么。惰性求值的通常“thunk”实现将未求值的表达式表示为包含函数指针以及要传递给函数的参数的数据结构。计算此值时,thunk 会被实际值替换,以便将来的引用不必再次调用该函数。
当您获取列表的第一个元素时,“x”将被计算为值(0,&y),其中“&y”位是指向“y”值的指针。由于 'y' 尚未被评估,这目前是一个 thunk。当您获取列表的第二个元素时,计算机会跟踪从 x 到该 thunk 的链接并对其进行评估。它的计算结果为 (1, &x),或者换句话说,是一个返回原始“x”值的指针。现在内存中有一个循环列表。程序员不需要修复后向指针,因为惰性求值机制会为您完成此操作。
关于haskell - “tying the knot”的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357956/
在阅读 Haskell 相关的东西时,我有时会遇到“打结”这个表达,我想我理解它的作用,但不理解它的作用。 那么,对于这个概念有什么好的、基本的、简单易懂的解释吗? 最佳答案 打结是循环数据结构问题的
tying-the-knot 策略可用于构建图,例如,使用简单的两条边图作为示例: data Node = Node Node Node -- a - b -- | | -- c - d squa
我正在学习 Haskell,正在阅读 Tying the Knot关于如何构建循环链表。在代码中 data DList a = DLNode (DList a) a (DList a) mkDList
我需要在 OpenGL 中绘制 NURBS 曲线的控制点和节点。控制点没有问题,因为它们是由它们的坐标定义的。但是,我在打结方面遇到了更多麻烦。 我有一个由 gluNurbsCurve 获取的结数组函
编辑:最初的问题是“用 comonad 打结”,但这里真正有帮助的是与 cirdec 中的 U2Graph 打结的二维结。 。 原始问题(直到 Anwser): 我想与源自 comonad 的数据结合
好吧,我是编程新手,我想知道如何打印某些字段的值。例如,我有一个速度,单位是节(21 节),如何将“节”部分添加到我的代码中,这样我就不会只打印整数?我希望它有 [number] 节。这是我到目前为止
我是一名优秀的程序员,十分优秀!