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

または、ロゼッタ コードで提案されているように、より複雑だが簡潔な方法で行うこともできます。

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 に答える