【问题标题】:ML compile error in a function函数中的 ML 编译错误
【发布时间】:2013-06-14 01:52:00
【问题描述】:

修复以下代码数小时后,我陷入了以下编译错误消息,无论我尝试什么,我都无法修复它。

错误:语法错误:删除 END RPAREN FUN

代码是:

 fun we  (array1 , k, n, fif1) = if Queue.isEmpty fif1 then (array1, ~1 , n ,
   fif1 )
    else (  
     let
        val b = Queue.head(fif1)
        val y = Queue.dequeue(fif1)
        val z = #1 b
        in 
            if ( (Array.sub (array1 , z))  = (What) ) then (array1 , #2 y ,    n    , fif1 ) else 
            (
            if (Array.sub (array1 ,(z+n) ) <> ( Block) ) then (
            ( Queue.enqueue ( fif1 , (z, (#2 b) ))) ; Array.update (array1 , ((z)+n) , Block)) else (); 
            if ( (Array.sub (array1 , (z+1)) ) <> ( Block) ) then (
            Queue.enqueue ( fif1 ,((z+1), ((#2b) + 1)));  Array.update (array1 , (z+1) , Block)) else () ; 
            if (Array.sub (array1 , (z-1 ) ) <> ( Block) ) then (
            Queue.enqueue ( fif1 , (((z-1), ((#2 b)+1) ) )) ; Array.update (array1 , (z-1) , Block)) else () ; 
            if ( (Array.sub (array1 , (z-n ) )) <> (Block) ) then 
            ( Queue.enqueue ( fif1 , ((z-n), ((#2 b)+2 )) );  Array.update (array1 , (z-n) , Block) ) else () ;
            we (array1 , k, n , fif1));
        end ) 

fun tb filename =
let
 val (n, array1) = parse filename
 val c = findt (T, array1, 0) 
 val fif1 = Queue.mkQueue ()
in
  #2 we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) )
end

错误信息是关于这部分代码的

we (array1 , k, n , fif1));
            end ) 

    fun tb filename =

任何可能的帮助将不胜感激,在此先感谢!

【问题讨论】:

    标签: compilation smlnj ml


    【解决方案1】:
                we (array1 , k, n , fif1));
            end )
    

    在 SML 中; 是一个语句分隔符,而不是一个语句终止符。这意味着:如果您有一个包含多个语句的块,则在语句之间放置;s,但不要在块中的最后一条语句之后放置;。换句话说:在we (array1 , k, n , fif1))之后不应该有;

    #2 we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) )
    

    在这里,您使用两个参数调用#2:函数we 和元组(array1,...)。你的意思是用元组作为参数调用we,然后用结果作为参数调用#2。那将是#2 (we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) ) )

    【讨论】:

    • 非常感谢!我会尝试修复它。如果还有其他问题,我将在这里发表评论,如果您稍后能检查这个问题,以防我在代码中遇到其他问题,我将不胜感激。
    • 现在出现的问题如下: val fif1 = Queue.mkQueue () in #2 (we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) ) ) stdIn:60.6-60.32 错误:运算符和操作数不一致 [tycon mismatch] 运算符域:单元操作数:int * int in expression: Queue.mkQueue (0,0) stdIn:61.9-61.57 错误:运算符和操作数不'不同意 [tycon mismatch] 运算符域:方数组 * int * int * (int * int) Queue.queue 操作数:方数组 * int * int * 表达式中的单位:bfs1 (array1,0,n,Queue.enqueue ( fif1,(,)))
    猜你喜欢
    • 2018-07-08
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-05-05
    • 1970-01-01
    相关资源
    最近更新 更多