【发布时间】:2013-07-10 21:09:56
【问题描述】:
在学习 OCaml 半年之后,我仍然在 functional programming 和 imperative programming 位上苦苦挣扎。
这不是关于using list or array,而是关于API设计。
例如,如果我要为用户写stack,我应该以functional 或imperative 的方式呈现它吗?
stack 应该有一个名为pop 的函数,这意味着将最后一个元素返回给用户并将其从堆栈中删除。所以如果我以functional 的方式设计我的stack,那么对于pop,我应该返回一个元组(last_element, new_stack),对吗?但我认为它很丑。
同时我觉得functional的方式在函数式编程中更自然。
那么,我应该如何处理这种设计问题呢?
编辑
我看到stack的源代码,他们定义的类型是这样的:
type 'a t = { mutable c : 'a list }
好的,标准库内部使用不可变的list,但将其封装在可变记录中。
我的理解是这样的,对于用户来说,它总是一个堆栈,因此不需要一个元组返回给客户端。
但是,它仍然不是一种功能性的方式,对吧?
【问题讨论】:
-
也许你可以让
pop返回对,top返回元素,drop返回子栈。
标签: functional-programming ocaml