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