1

我想list的正是持久化的执行stack。但是,当我遇到有关实际功能实现的文章时,它们总是使用递归类型/可区分联合。他们为什么不简单地适应/使用'a list

type 'a Stack = 
    | Nil
    | Cons of 'a * 'a Stack
4

1 回答 1

1

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

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

type 'a Stack = 'a list

正如@Tomas 所说,自己实现堆栈是学习函数式编程的一个很好的练习。我从F# wikibook的Stack部分引用了几句话。

F# 的内置列表数据结构本质上是一个不可变堆栈。虽然它肯定有用,但为了编写探索性代码,我们将从头开始实现一个堆栈。我们可以使用简单的联合来表示堆栈中的每个节点。

于 2012-10-02T15:32:12.600 回答