编写一个复制列表中每个元素的函数。例如:{duply1-2 3}返回列表1 1 2 2 3 3.
我怎么用奥兹莫扎特来做呢?我不知道奥兹的正法,在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).发布于 2015-02-25 00:02:08
这是一种基于模式识别的解决方案。检查输入的数据是否是一个列表(即,它有一个头和一个尾( H =T)),然后第一个元素绑定到变量标识符H。这样,在对列表的其余部分执行相同的操作之前,只需添加两个H就可以执行重复操作。如果L是0,请记住返回0 --空列表,这样你的最终答案也是一个列表。
declare
fun {Duplicate L}
case L of H|T then
H|H|{Duplicate T}
else
nil
end
end
{Browse {Duplicate [1 2 3]}}https://stackoverflow.com/questions/28703411
复制相似问题