SML语言中如何实现按规则重复列表元素的repeat函数
SML repeat函数实现指导
你当前的代码仅对lst1做了模式匹配,没有同步处理第二个列表lst2,需要调整为同时匹配两个列表的结构,再搭配局部辅助函数实现元素重复逻辑即可,具体实现方案如下:
- 首先定义局部辅助函数,用于生成将单个元素重复指定次数的列表:输入待重复元素
x和重复次数n,当n为0时返回空列表,否则递归拼接x和n-1次重复的结果 - 外层函数同步遍历
lst1和lst2:两个列表均为空时返回空列表,否则取当前位置的元素和重复次数,调用辅助函数生成对应重复列表,再拼接剩余列表递归调用的结果
完整可运行代码如下:
fun repeat(lst1, lst2) = let (* 局部辅助函数:将x重复n次 *) fun replicate(x, 0) = [] | replicate(x, n) = x :: replicate(x, n-1) in case (lst1, lst2) of ([], []) => [] | (x::xs, cnt::cs) => replicate(x, cnt) @ repeat(xs, cs) (* 若需要处理两列表长度不一致的边界,可额外加匹配分支抛出异常,示例如下 *) (* | _ => raise Fail "两个列表长度不一致" *) end
测试用例验证:
运行repeat ([1,2,3], [4,0,3])将返回[1,1,1,1,3,3,3],完全符合需求。
内容的提问来源于stack exchange,提问作者Jrandl
相关产品推荐
相关产品推荐

