警告10:此表达式应具有类型单位

kaf*_*fka 6 ocaml

我正在写一个包含一些"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"循环时,我该如何解决这个问题?

new*_*cct 8

您的代码有几个问题.

错误是因为for它不返回任何内容,因此循环内部纯粹是为了副作用.所以它应该有单位类型.你的使用=没有单元类型,因为=实际上是相等运算符,比较两个值,并返回truefalse.

所以你使用了错误的运算符.您似乎正在尝试"分配" 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)