0

“Learn You a Haskell”展示了以下数据类型,然后给出了一系列使用它来操作树的算法

data Crumb a = LeftCrumb a (Tree a) | Right Crumb a (Tree a) deriving (Show)

与命令式语言不同,像二进制搜索这样的东西会用向下指针来解释。这里没有提到指针。但是像二进制搜索这样的算法是如何在 Haskll 中编译下来的呢?它们是否编译成同样有效的向下指针?

4

1 回答 1

1
  • Haskell 语言:只要符合规范,编译器就可以对代码做任何他们想做的事情。这意味着可以像您在 C 中所期望的那样存在指针行走,或者可能没有。语言规范并不真正关心事物是如何实现的,只要它们按预期工作即可。

  • GHC 编译器:如果你真的想知道 GHC 到底是如何编译你的代码的,我建议学习阅读 C--(读作“C-minus-minus”)或汇编。你可以让 GHC-ddump-cmm-ddump-asm. 除非您打算开始优化编译器,否则我认为这不是一个非常有用的练习。

    作为一般规则,GHC 编写的命令式代码看起来与人类编写的非常不同。所以可能没有你正在考虑的指针。(而且很酷的是它最终还是有效地发挥了作用!)

于 2013-10-25T04:36:50.917 回答