List 数组中的重复元素(SML)

List 数组中的重复元素(SML),list,sml,List,Sml,我有以下清单 L = [2, 4, 6, 8, 10] 我试图编写一个函数,复制列表中的每个元素,所以最终的结果是 L = [2, 2, 4, 4, 6, 6, 10, 10] 我的职责是什么 fun duplicateList(nil) = nil | duplicateList([a]) = [a] | duplicateList(L) = let val copy = L in hd(L)::hd(copy)::duplicateList(tl(L

我有以下清单

L = [2, 4, 6, 8, 10]
我试图编写一个函数,复制列表中的每个元素,所以最终的结果是

L = [2, 2, 4, 4, 6, 6, 10, 10]
我的职责是什么

fun duplicateList(nil) = nil
  | duplicateList([a]) = [a]
  | duplicateList(L) = 
       let val copy = L
       in hd(L)::hd(copy)::duplicateList(tl(L))
       end;
但我一直收到这样一个错误:错误:语法错误:用EQUALOP替换END


这意味着什么?我如何避免它?

您可以按如下方式编写函数

fun duplicateList nil = nil
  | duplicateList (x::xs) = x :: x :: duplicateList xs;

这样,您就不必制作副本,只需担心两种情况。

也许您可以执行以下操作:

val L = [2, 4, 6, 8, 10]
val D = foldr (fn (a, b) => a::a::b) [] L

对我来说,它可以粘贴到
sml
(它有一个bug,但不是语法错误)。这就是你的全部代码吗?我无法通过评估你的函数声明来重现你的错误。使用新泽西v110.77的
标准ML。您的代码工作正常!谢谢:)但有一件事,我不得不在
duplicateList([a])=a:[a]
中修改它,以确保列表的最后一个元素是重复的。@mynorka您可以省略该子句。。詹姆斯所写的将有助于进一步解释@RasmusWL的含义。考虑列表<代码> [A] < /代码>,它也被表示为<代码>::nIL/COD>。这与x=a和xs=nil的
(x::xs)
模式相匹配。该函数产生
a::a::duplicateList nil
,它简化为
a::a::nil
,也写为
[a,a]