2015-02-24 44 views
1

編寫一個複製列表中每個元素的函數。例如: {Duplicate [1 2 3]}返回列表[1 1 2 2 3 3]。複製列表中的元素OZ

我該如何在OZ莫扎特做到這一點?我不知道盎司的sintaxis,在序言中會是這樣的:

even(N) :- 
    N mod 2 =:= 0.  

doubleeven([],[]). 

doubleeven([H|T], [H,H|Z]) :- 
    even(H), 
    !, 
    doubleeven(T,Z). 

doubleeven([H|T], [H|Z]) :- 
    doubleeven(T,Z). 

回答

0

這是一個基於模式識別的解決方案。你檢查輸入的數據是否是一個列表(即它有一個Head和一個尾(H | T)),然後第一個元素綁定到變量標識符H.這樣,你可以通過添加兩個H在你繼續與列表中的其他人做同樣的事情之前。如果L爲零,請記得返回nil - 空列表,以便您的最終答案也是一個列表。

declare 
fun {Duplicate L} 
    case L of H|T then 
     H|H|{Duplicate T} 
    else 
     nil 
    end 
end 

{Browse {Duplicate [1 2 3]}}