所以给了我以下问题,我正在经历一个难以置信的艰难时期,想方设法开始……有人可以帮助我吗?
到目前为止,我的参考文献是:https://www.cl.cam.ac.uk/~lp15/MLbook/pub-details.html(本质上是第3章)
编写一个ML函数,该函数接受一个整数对列表(即(int * int)list),并返回一个包含每对整数之和的列表。例如,当在[[1,2 ,,(3,4)]上调用时,此函数应返回[3,7]。
这是开始写Andreas Rossberg所暗示的递归定义的方式。
fun f [] = ...
| f ((x,y)::pairs) = ...
这是采用对列表的函数f
的基础。它使用模式匹配来耗尽所有可能的输入值,方法是先将列表分为空和非空列表,然后再将非空列表分为“头为x
和y
对,其余为尾对”在第一对之外,为pairs
。
您可以通过多种方式编写此内容。另一个正在使用case-of:
fun f pairs =
case pairs of
[] => ...
| (x,y) :: rest => ...
这里因为pairs
是all对,并且case-of中的模式匹配仍然将非空列表分为头和尾,所以我想避免重叠整个输入列表,pairs
,其余的对超出第一对,rest
。所以我给他们起了单独的名字。
这听起来可能是您目前最受益的是,阅读了更多关于模式匹配的教科书,并要求某种导师。