2015-10-11 3 views
0

Мне нужно сделать программу в Oz, которая вернет максимальное число в списке. Код, который я до сих пор выглядит следующим образом:Найти max в списке - 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 

среда Моцарт принимает код, но не возвращает ответ. Ввод выглядит следующим образом: {Browse {Max [1 2]}}. Что я делаю не так?

+0

Что вы имеете в виду, что «Emacs примет код?» Что этот вопрос имеет отношение к Emacs? – Drew

ответ

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]}}