【发布时间】:2010-03-14 16:30:43
【问题描述】:
你知道Haskell中是否有指针吗?
如果是:您如何使用它们?他们有什么问题吗?为什么它们不受欢迎?
如果不是:有什么原因吗?
【问题讨论】:
标签: pointers haskell language-design
你知道Haskell中是否有指针吗?
如果是:您如何使用它们?他们有什么问题吗?为什么它们不受欢迎?
如果不是:有什么原因吗?
【问题讨论】:
标签: pointers haskell language-design
是的,有。看看Foreign.Ptr或Data.IORef
我怀疑这不是你想要的。由于 Haskell 大部分情况下没有状态,这意味着指针不适合语言设计。在函数之外有一个指向内存的指针意味着一个函数不再是纯函数,只允许指向当前函数内的值的指针是没有用的。
【讨论】:
Haskell 确实通过外部函数接口扩展提供了指针。例如,查看Foreign.Storable。
指针用于与 C 代码进行互操作。并非每天都适合 Haskell 编程。
如果你正在寻找references——指向你希望改变的对象的指针——有STRef 和IORef,它们的许多用途与指针相同。但是,您应该很少(如果有的话)需要 Refs。
【讨论】:
如果你只是想避免像 sepp2k 假设的那样复制大值,那么你什么都不用做:在大多数实现中,所有重要的值都在堆上单独分配并通过机器级地址相互引用(即指针)。但同样,您无需对此做任何事情,它会为您处理好。
要回答您有关如何传递值的问题,它们以实现认为合适的任何方式传递:因为无论如何您都不能改变值,它不会影响代码的含义(只要严格受到尊重);通常这是按需要解决的,除非你通过例如编译器可以看到的 int 值已经被评估...
Pass-by-need 与 pass-by-reference 类似,只是任何给定的引用都可以引用实际评估的值(无法更改),或者引用尚未评估的值的“thunk” .维基百科有more。
【讨论】: