我正在写一个包含一些"for"循环的ocaml程序,我的问题是,对于每个循环,你会收到这条消息:"警告10:这个表达式应该有类型单位."
示例:
let f q p rho=
let x = [] in
if q > p then
for i=0 to rho do
x= q :: x
done;
x;;
Run Code Online (Sandbox Code Playgroud)
每次我使用"for"循环时,我该如何解决这个问题?
您的代码有几个问题.
错误是因为for它不返回任何内容,因此循环内部纯粹是为了副作用.所以它应该有单位类型.你的使用=没有单元类型,因为=实际上是相等运算符,比较两个值,并返回true或false.
所以你使用了错误的运算符.您似乎正在尝试"分配" x.但是在ML中,你不能分配给"变量",因为它们在定义时被绑定到一个值并且不能改变.获得可变性的一种方法是使用可变单元格(称为"引用"):使用该ref函数从初始值创建可变单元格; 该!运营商以获得其价值的; 和:=操作员改变里面的价值.
例如:
let f q p rho=
let x = ref [] in
if q > p then
for i=0 to rho do
x := q :: !x
done;
!x;;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4147 次 |
| 最近记录: |