2016-09-20 4 views
1

Mozart OZ에서 빠른 정렬을 구현하려고하지만 변수 도입에 오류가 발생하지 않습니다. 나는이 언어로 새로운 사람이다. 제발 도와주세요.변수 파티션이 mozart에 오류가 발생하지 않았습니다. Oz

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

도입되지 않은 변수의 이름은 무엇입니까? – beroal

답변

0
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 
0

이 내 과제 중 하나입니다 : 여기 솔루션입니다 :

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}