sml - 具有内部状态的简单函数
问题描述
我想编写一个具有内部状态的最小函数。它应该有签名f: () -> ()
,并且它被调用的第 n 次应该打印数字 n。
我想 refs 是必要的,但我不知道如何使用它们来实现这样的功能。
解决方案
我找到了一个带有外部本地参考的解决方案
local val mem = ref 0 in
fun f () =
let val _ = mem := !mem + 1 in print (Int.toString (!mem)) end
end
稍微不同的问题的解决方案是生成函数
fun iter_int n =
let val i = ref 0
in fn () =>
let val j = !i
in i := !i + 1 ; j
end
end
推荐阅读
- c# - 使用参数中的日期从 c# 调用存储过程
- amazon-s3 - Amazon S3 的端点是什么?
- ios - 如何根据 UITableViewCell 中的内容调整水平 UICollectionView 的高度
- r - 在 Azure Data Lake Analytics 中安装 R 包
- javascript - 需要将我的供应商 ID 分配给 InvoiceTable - 一对多关系
- angular - 图像未在 Angular 应用程序上加载
- c# - 使用实体框架从数据库中获取行到列表
- sql - 如何使用自定义维度作为唯一标识符连接 BigQuery 中的表
- mysql - Galera mysql集群无法在Kubernetes中启动
- c++ - 在 C++ 中使用 gRPC 时未解析的外部符号