简体   繁体   中英

Variable Partition not introduced error in mozart Oz

I am trying to implement quick-sort in Mozart OZ but variable not introduce error comes. I am new with this language. Please help me out.

 declare
fun {QuickSort L}
    case L
    of X|L2 then Left Right SL SR in
       {Partition L2 X Left Right}
       SL={QuickSort Left}
       SR={QuickSort Right}
       {Append SL X|SR}
    [] nil then  nil
 end
 end
 {Browse {QuickSort[4 7 66 545 1 65 22 322]}}
proc {Partition Xs Pivot Left Right}
   case Xs
   of X|Xr then
      if X < Pivot
      then Ln in
         Left = X | Ln
         {Partition Xr Pivot Ln Right}
      else Rn in
         Right = X | Rn
         {Partition Xr Pivot Left Rn}
      end
   [] nil then Left=nil Right=nil
   end
end


fun lazy {LQuickSort Xs}
   case Xs of X|Xr then Left Right SortedLeft SortedRight in
      {Partition Xr X Left Right}
      {LAppend {LQuickSort Left} X|{LQuickSort Right}}
   [] nil then nil
   end
end

This is one of my assignment: here is the solution:

declare
fun {LAppend Xs Ys}
   case Xs of X|Xr then
      X|{LAppend Xr Ys}
   [] nil then Ys
   end
end

declare
proc {Partition L2 X L R}
   case L2
   of Y|M2 then
      if Y<X then Ln in
     L=Y|Ln
     {Partition M2 X Ln R}
      else Rn in
     R=Y|Rn
     {Partition M2 X L Rn}
      end
   [] nil then L=nil R=nil
   end
end

declare
fun {LQuicksort L}
   case L of X|L2 then Left Right SL SR in
      {Partition L2 X Left Right}
      SL={LQuicksort Left}
      SR={LQuicksort Right}
      {LAppend SL X|SR}
   [] nil then nil
   end
end

declare
Xs={LQuicksort [3 1 4 1 5 9 2 6 5]}
{Browse Xs}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM