Sml 错误:插入EQUALOP

Sml 错误:插入EQUALOP,sml,ml,Sml,Ml,嗨,有人能帮我弄清楚为什么我会被解雇吗 ERROR: Inserting EQUALOP 对于以下代码 fun generator inchan outchan n = if n>0 then (let fun loop () = val c =

嗨,有人能帮我弄清楚为什么我会被解雇吗

ERROR: Inserting EQUALOP
对于以下代码

fun generator inchan outchan n = if n>0                         
           then 
               (let 
                   fun loop () =                          
                         val c = recv(outchan)
                         val _ = send (inchan, c)
                in  
                   (loop ();(generator inchan outchan (n-1)))
                end)
            else inchan;

输入
let
语句,然后定义函数。但是,在该函数中,您 似乎想要定义更多的变量。为此,您需要另一条
let
语句。如果没有它,您将得到如下语法错误

请尝试使用此选项:

fun loop () = send (inchan, recv (outchan))
或者,如果您想要更清晰地显示单独的行:

fun loop () =
    let
      val c = recv (outchan)
    in
      send (inchan, c)
    end
或许

fun loop () = 
    let
      val c = recv (outchan)
      val _ = send (inchan, c)
    in
      ()
    end

使用这个生成器代码,我如何递归地创建新邮箱,使第一个邮箱的outchan成为下一个邮箱的inchan?我不知道你想做什么,因为你没有解释。这段代码是循环函数的替代品,其他什么都没有。如果代码的另一部分不起作用,你应该问另一个问题。我必须实现一个生成函数来生成邮箱流。生成函数将由两个通道参数化,第一个邮箱的输入和输出通道,以及指示要生成多少邮箱的整数。此函数应为递归函数,并分配新通道。在递归调用generator时,上一个out通道应该是下一个邮箱的in通道。应将新通道分配为新的输出通道。我已经写了一个生成函数的代码,但是我认为有一个无限循环,因为它不会停止。生成函数的代码是'fun generator inchan outchan n=let fun loop incha outcha num=if(n>0)then((邮箱incha outcha);(loop outcha)(通道())(n-1)))else(inchan)在(循环inchan outchan n)端`