2015-10-11 195 views
0

我必須在Oz中創建一個程序,它將返回列表中的最大整數。我到目前爲止的代碼如下所示:查找列表中的最大值 - OZ

declare 
    proc {Max Xs K} 
     case Xs 
     of nil then K = 0 
     [] X|Xr then 
      local M in 
       if M < X then M = X end 
       {Max Xr K} 
       K = M 
      end 
     end 
    end 

Mozart環境將接受代碼,但不會返回答案。輸入如下所示: {瀏覽{Max {1 2}}}。我究竟做錯了什麼?

+0

什麼你的意思是「Emacs會接受這些代碼嗎?」這個問題與Emacs有什麼關係? – Drew

回答

0

您沒有任何其他條款,那麼您如何比較M和X? M在開始時沒有任何價值。我也將使用功能,使其更簡單,你順便說一句不遠處的解決方案:

local 
fun {MaxList L1} 
    case L1 
    of nil then 0 
    [] X|Xr then 
    if {MaxList Xr}>X then {MaxList Xr} 
    else X 
    end 
    end 
end 
in 
{Browse {MaxList [1 2 3 4 3]}} 
end 

或者你可以在更復雜,但簡潔的方式去做,如羅塞塔代碼提示:

declare 
    fun {Maximum X|Xr}   %% pattern-match on argument to make sure the list is not empty 
    {FoldL Xr Value.max X} %% fold the binary function Value.max over the list 
    end 
in 
    {Show {Maximum [1 2 3 4 3]}}