复制列表OZ的元素

时间:2015-02-24 18:25:29

标签: oz mozart

编写一个复制列表中每个元素的函数。例如: {Duplicate [1 2 3]}返回列表[1 1 2 2 3 3]。

我怎样才能在OZ莫扎特中制作它?我不知道oz的sintaxis,在prolog中会是这样的:

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).

1 个答案:

答案 0 :(得分:0)

这是一种基于模式识别的解决方案。你检查传入的数据是否是一个列表(即它有一个头和一个尾(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]}}