复制列表 OZ 的元素
Duplicate the elements of a list OZ
编写一个函数来复制列表中的每个元素。例如:
{复制 [1 2 3]} returns 列表 [1 1 2 2 3 3].
我怎样才能在 OZ mozart 中制作它?我不知道 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).
这是一个基于模式识别的解决方案。你检查传入的数据是否是一个列表(即它有一个 Head 和一个 Tail (H|T)),然后第一个元素被绑定到变量标识符 H。这样你就可以通过添加两个来重复H 在你继续对列表的其余部分做同样的事情之前。如果 L 为 nil,请记住 return nil -- 空列表,这样您的最终答案也是一个列表。
declare
fun {Duplicate L}
case L of H|T then
H|H|{Duplicate T}
else
nil
end
end
{Browse {Duplicate [1 2 3]}}
编写一个函数来复制列表中的每个元素。例如: {复制 [1 2 3]} returns 列表 [1 1 2 2 3 3].
我怎样才能在 OZ mozart 中制作它?我不知道 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).
这是一个基于模式识别的解决方案。你检查传入的数据是否是一个列表(即它有一个 Head 和一个 Tail (H|T)),然后第一个元素被绑定到变量标识符 H。这样你就可以通过添加两个来重复H 在你继续对列表的其余部分做同样的事情之前。如果 L 为 nil,请记住 return nil -- 空列表,这样您的最终答案也是一个列表。
declare
fun {Duplicate L}
case L of H|T then
H|H|{Duplicate T}
else
nil
end
end
{Browse {Duplicate [1 2 3]}}