需要编写一个“ blendList”函数,除了使用“ length”之外,不使用任何内置函数

问题描述

我正在尝试解决此问题:

定义一个函数

blendList : 'a list * 'a list -> 'a list

包含两个列表,并返回一个包含两个列表的“混合”列表,并且从两个列表中严格选择值。除length之外,不要使用任何内置的标准ML函数。

一些例子:

blendList([1,2],[100,200,300,400]) (* Returns [ 1,100,2,400] *)
blendList([200,900],[3,1]) (* Returns [ 200,3,1,900] *)
blendList([],200]) (* Returns [100,200] *)
blendList([1,[]) (* Returns [1,2] *)

我该怎么做?

解决方法

请考虑以下代码:

fun blendList ([],l) = l
  | blendList(l,[]) = l
  | blendList(a :: restA,b :: restB) = a :: b :: blendList(restA,restB);
  
blendList([1,2],[100,200,300,400]); (* Returns [ 1,100,2,400] *)
blendList([200,900],[3,1]); (* Returns [ 200,3,1,900] *)
blendList([],200]); (* Returns [100,200] *)
blendList([1,[]); (* Returns [1,2] *)
blendList([1,[1,2]); (* Returns [1,2] *)

我们将blendList分为3个选项:

  1. 第一个列表为空。
  2. 第二个列表为空。
  3. 两个都有条目。

在第一个选项中,我们获取第二个列表。在第二个选项中,我们采用第一个列表。在最后一个中,我们采用了前两个元素,并使用剩下的内容再次激活相同的方法。

请注意,如果两个列表的大小相同,它将到达最后一个调用blendList[[],[]],这将属于第一种情况,并返回[]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...