【发布时间】:2022-01-05 02:24:00
【问题描述】:
我不想使用模块Stack,而是想自己构建一个弹出功能。
我实现的功能是:
let pop (stack_lst:stack) = match stack_lst with
| [] -> None
| [x] -> x
| hd::tl -> hd
很快我意识到我的函数只给出了顶部框架,但是我的函数并没有从堆栈中删除顶部框架。从这个意义上说,框架仍然存在。既然 OCaml 给了我不可变的数据结构,那我该怎么办呢?
除了我的问题,我的数据类型定义为:
location = Obj of int | Null
and
environment = (var * location) list
and
frame = Decl of environment | Call of environment * stack
and
stack = frame list
【问题讨论】: