Pointers 哈斯克尔有指针吗?

Pointers 哈斯克尔有指针吗?,pointers,haskell,language-design,Pointers,Haskell,Language Design,你知道里面有没有指针吗 如果是:您如何使用它们?他们有什么问题吗?为什么它们不受欢迎 如果没有:有什么原因吗 是的,有。看看或 我怀疑这不是你想要的。由于Haskell在很大程度上没有状态,这意味着指针不适合语言设计。在函数外部有一个指向内存的指针意味着函数不再是纯函数,只允许指针指向当前函数中的值是无用的。Haskell确实通过外部函数接口扩展提供指针。例如,请看 指针用于与C代码进行互操作。不是每天都有Haskell编程 如果你在寻找引用——指向你想要改变的对象的指针——有STRef和,它

你知道里面有没有指针吗

  • 如果是:您如何使用它们?他们有什么问题吗?为什么它们不受欢迎

  • 如果没有:有什么原因吗


    • 是的,有。看看或


      我怀疑这不是你想要的。由于Haskell在很大程度上没有状态,这意味着指针不适合语言设计。在函数外部有一个指向内存的指针意味着函数不再是纯函数,只允许指针指向当前函数中的值是无用的。

      Haskell确实通过外部函数接口扩展提供指针。例如,请看

      指针用于与C代码进行互操作。不是每天都有Haskell编程


      如果你在寻找引用——指向你想要改变的对象的指针——有STRef和,它和指针有很多相同的用途。但是,您应该很少(如果有)需要引用。

      如果您只是希望避免复制大值,正如sepp2k所设想的那样,那么您不需要做任何事情:在大多数实现中,所有非平凡值都在堆上单独分配,并通过机器级地址(即指针)相互引用。但是再一次,你不需要做任何事情,它是为你照顾的

      为了回答您关于如何传递值的问题,它们以实现认为合适的任何方式传递:因为您无论如何都不能改变值,所以它不会影响代码的含义(只要严格性得到尊重);通常情况下,这是根据需要实现的,除非您正在传入编译器可以看到的已经计算过的Int值


      传递需求类似于传递引用,只是任何给定引用都可以引用实际的评估值(无法更改),或者引用“thunk”表示尚未评估的值。Wikipedia有。

      我怀疑他正在寻找一种在不创建副本的情况下传递大型数据结构的方法,基于错误的假设,将值传递给函数,就像在C++中调用值时所做的那样。@ Sepp2k或与内存映射设备交谈。这是Haskell的主要优点之一:在大多数情况下,您必须做得很少,以确保效率。