【问题标题】:ERROR: Inserting EQUALOP错误:插入 EQUALOP
【发布时间】:2013-12-06 08:03:11
【问题描述】:

你好,谁能帮我弄清楚为什么我得到了

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;

【问题讨论】:

    标签: sml ml


    【解决方案1】:

    您输入一个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
    

    【讨论】:

    • 使用这个生成器代码我如何递归地创建新的邮箱,这样第一个邮箱的外号就是下一个的小号?
    • 我不知道你想做什么,因为你没有解释它。此代码是您的循环函数的替代品,仅此而已。如果代码的另一部分不起作用,您应该提出另一个问题。
    • 我必须实现一个生成函数,它将生成一个邮箱流。生成函数将由两个通道参数化,第一个邮箱的输入和输出通道,以及指示要生成多少个邮箱的整数。这个函数应该是递归的并分配新的通道。在生成器的递归调用中,前一个输出通道应该是下一个邮箱的输入通道。应该分配一个新通道作为新的输出通道。我已经编写了生成器函数的代码,但我认为这是一个无限循环,因为它不会停止。
    • 生成函数的代码是` fun generator inchan outchan n = let fun loop incha outcha num = if (n>0) then ((mailbox incha outcha) ; (loop outcha (channel() ) (n-1))) else (inchan) in (loop inchan outchan n) end; `
    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多