成对和列表

问题描述 投票:0回答:1

所以给了我以下问题,我正在经历一个难以置信的艰难时期,想方设法开始……有人可以帮助我吗?

到目前为止,我的参考文献是:https://www.cl.cam.ac.uk/~lp15/MLbook/pub-details.html(本质上是第3章)

编写一个ML函数,该函数接受一个整数对列表(即(int * int)list),并返回一个包含每对整数之和的列表。例如,当在[[1,2 ,,(3,4)]上调用时,此函数应返回[3,7]。

sml smlnj
1个回答
0
投票

这是开始写Andreas Rossberg所暗示的递归定义的方式。

fun f [] = ...
  | f ((x,y)::pairs) = ...

这是采用对列表的函数f的基础。它使用模式匹配来耗尽所有可能的输入值,方法是先将列表分为空和非空列表,然后再将非空列表分为“头为xy对,其余为尾对”在第一对之外,为pairs

您可以通过多种方式编写此内容。另一个正在使用case-of

fun f pairs =
    case pairs of
         [] => ...
       | (x,y) :: rest => ...

这里因为pairsall对,并且case-of中的模式匹配仍然将非空列表分为头和尾,所以我想避免重叠整个输入列表,pairs,其余的对超出第一对,rest。所以我给他们起了单独的名字。

这听起来可能是您目前最受益的是,阅读了更多关于模式匹配的教科书,并要求某种导师。

© www.soinside.com 2019 - 2024. All rights reserved.