F# 为什么我们使用递归类型来实现堆栈而不是列表?

F# 为什么我们使用递归类型来实现堆栈而不是列表?,f#,stack,F#,Stack,我认为list正是持久堆栈的实现。然而,当我看到关于实际函数实现的文章时,它们总是使用递归类型/区分联合。为什么他们不简单地修改/使用'a列表 type 'a Stack = | Nil | Cons of 'a * 'a Stack 为了结束这个问题,我发表了我的评论作为答案 你说得对。要将列表用作不可变堆栈,可以声明类型缩写 type 'a Stack = 'a list 正如@Tomas所说,自己实现堆栈是学习函数式编程的一个很好的练习。我引用了维基百科中的前几句话

我认为
list
正是持久
堆栈的实现。然而,当我看到关于实际函数实现的文章时,它们总是使用递归类型/区分联合。为什么他们不简单地修改/使用
'a列表

type 'a Stack = 
    | Nil
    | Cons of 'a * 'a Stack
为了结束这个问题,我发表了我的评论作为答案

你说得对。要将列表用作不可变堆栈,可以声明类型缩写

type 'a Stack = 'a list
正如@Tomas所说,自己实现堆栈是学习函数式编程的一个很好的练习。我引用了维基百科中的前几句话

F#的内置列表数据结构本质上是一个不可变的堆栈。 虽然它肯定是可用的,但为了写作的目的 代码,我们将从头实现一个堆栈。我们可以代表 使用简单并集的堆栈中的每个节点

为了结束这个问题,我发表了我的评论作为答案

你说得对。要将列表用作不可变堆栈,可以声明类型缩写

type 'a Stack = 'a list
正如@Tomas所说,自己实现堆栈是学习函数式编程的一个很好的练习。我引用了维基百科中的前几句话

F#的内置列表数据结构本质上是一个不可变的堆栈。 虽然它肯定是可用的,但为了写作的目的 代码,我们将从头实现一个堆栈。我们可以代表 使用简单并集的堆栈中的每个节点


是的,你说得对。您只需在列表中键入“a Stack=”即可。但是人们可能会为了学习的目的而尝试自己实现它。我认为主要的区别在于,通常堆栈是可变的,而有区别的联合是不可变的-使用DU版本
Pop()
必须返回一个新的stack@JohnPalmer我指的是不可变的
堆栈
,而且
list
也是不可变的。您是否有任何指向实现该堆栈的其他文章的链接?他们可能这样做是为了教授基本的功能概念。。。(重新实现基本列表是一个很好的练习)。@TomasPetricek:我想这篇文章可能是指维基百科中的文章。这里清楚地提到了探索的目的。是的,你是对的。您只需在列表中键入“a Stack=”即可。但是人们可能会为了学习的目的而尝试自己实现它。我认为主要的区别在于,通常堆栈是可变的,而有区别的联合是不可变的-使用DU版本
Pop()
必须返回一个新的stack@JohnPalmer我指的是不可变的
堆栈
,而且
list
也是不可变的。您是否有任何指向实现该堆栈的其他文章的链接?他们可能这样做是为了教授基本的功能概念。。。(重新实现基本列表是一个很好的练习)。@TomasPetricek:我想这篇文章可能是指维基百科中的文章。这里清楚地提到了探索的目的。