0

我必须在 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 环境将接受代码但不会返回答案。输入如下所示:{Browse {Max [1 2]}}。我究竟做错了什么?

4

1 回答 1

0

您没有任何 else 子句,那么您如何比较 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

或者您可以按照 Rosetta 代码中的建议以更复杂但更简洁的方式进行操作:

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]}} 
于 2015-10-14T08:42:04.457 回答