Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell堆栈解释_Haskell_Stack - Fatal编程技术网

Haskell堆栈解释

Haskell堆栈解释,haskell,stack,Haskell,Stack,在哪里可以找到关于Haskell中Stack的好解释。目前我只知道: 传统的抽象数据类型完全隐藏了内部 数据表示 可以使用列表实现多态堆栈,而无需告诉 消费者了解其内部工作原理 关于在Haskell中使用LYAH中的状态单子创建堆栈,有一个很好的解释: 通常需要使用抽象堆栈接口的原因是,内部表示支持我们想要隐藏的操作。例如,一个可变链表或数组将允许人们在保持内部表示的情况下改变堆栈中间的元素。 在Haskell中,您实际上没有这个问题,因为列表是单独链接且不可变的。您可以对它们执行的唯一操作是使

在哪里可以找到关于Haskell中Stack的好解释。目前我只知道:

传统的抽象数据类型完全隐藏了内部 数据表示

可以使用列表实现多态堆栈,而无需告诉 消费者了解其内部工作原理


关于在Haskell中使用LYAH中的状态单子创建堆栈,有一个很好的解释:


通常需要使用抽象堆栈接口的原因是,内部表示支持我们想要隐藏的操作。例如,一个可变链表或数组将允许人们在保持内部表示的情况下改变堆栈中间的元素。
在Haskell中,您实际上没有这个问题,因为列表是单独链接且不可变的。您可以对它们执行的唯一操作是使用:构造函数创建一个新列表(本质上是推操作),并对列表进行模式匹配,返回列表的head元素和tail(本质上是pop操作)。所有其他列表函数都是在这两个push和pop原语之上实现的。

通常只使用列表?如果要隐藏内部表示,则需要定义要公开的操作。