阅读 Haskell 相关内容时,我有时会遇到“tying the knot”这个表达式。我认为我理解它的作用,但不理解具体的实现方法。 那么,有没有任何好的、基础的、简单易懂的解释这个概念的资料呢?
我正在处理一个Haskell项目,其中涉及打结:我正在解析图的序列化表示形式,其中每个节点都在文件的某些偏移量处,并且可能通过其偏移量引用另一个节点。因此,在解析时需要建立一个从偏移量到节点的映射表,我可以在do rec块中反馈给自己。 我已经让它工作了,并且有点抽象成了类似于StateT的...
我正在用Haskell编写一个Brainfuck解释器,我想到了一种我认为非常有趣的程序描述:data Program m = Instruction (m ()) (Program m) | Control (m (Program m)) ...
我碰到了一件事情,我猜想是在Data.Map中的一个bug,但也很有可能是我Haskell知识方面的问题。希望有人能澄清这是哪个问题 :) 请参考此处的代码片段。我正在将一个循环链表结构序列化为字节流。对于任何给定的节点,形式为:data Node = Node { val :: Wo...
几年前我上了一个算法课,在那里我们得到了以下问题(或类似的问题): 有一栋有 n 层楼的建筑,有一台电梯每次只能上2层楼,下3层楼。使用动态规划编写一个函数,计算电梯从第 i 层到第 j 层所需步数。 显然,使用状态化方法很容易解决这个问题,您可以创建一个 n 元素长度的数组并将其...
假设我有一个非常简单的case类,像这样: case class Foo(name: String, other: Foo) 我该如何定义a和b,使得a.other等于b,b.other等于a,并且这两个变量是不可变的?Scala是否提供了类似于"tying the knot"的方法?我...
我想要写一段简洁的代码(否则需要花费很多时间实现),通过tying the knot来完成。大致上就是这样:n <- myinstr n x 理论上,myinstr应该运行x并得到一个值,这个值会变成n。 myinstr在State单子中运行,将把n放入状态中,但这不会影响x的计算。 ...
我有一个问题,不知道该如何理解。我原本想问是否有人能帮我解决具体问题,但我突然想到可以提出一个更一般的问题,希望能从中获得更好的一般性理解。所以问题来了: 通常,如果您的程序太懒了,那么很明显会出现问题,例如空间泄漏等引人注目的问题。我遇到的问题相反:我的程序过于严格。我正在尝试绑定节点,并...
(说明:本篇文章是一个Literate Haskell文件,您可以将其复制粘贴到文本缓冲区中,另存为 someFile.lhs ,然后使用ghc运行它。) 问题描述:我想创建一个包含两种不同节点类型的图,这两种类型相互引用。下面的示例非常简化。两个数据类型A和B在这里几乎是相同的,但在原始程...
为什么iterate没有像这样定义: iterate :: (a -> a) -> a -> [a] iterate f x = xs where xs = x : map f xs 在Prelude中?