【发布时间】:2020-09-30 05:59:46
【问题描述】:
您好,我是 f# 的新手,我做了这个练习,我不知道:
“实现一个功能:”
let compress (l : List<'a>) : List<'a> = ...
这将删除 l 中相同元素的连续出现。例如将 [a;a;a;a;b;b;c] 压缩为 [a;b;c]
我不允许使用 f# 的内置函数,需要通过模式匹配来做到这一点。
我目前的代码(不多):
let rec compress (l: List<'a>) : List<'a> =
match l with
| [] -> l
感谢您的帮助!
【问题讨论】:
-
考虑到这是一个练习,也许我只是给个提示?就像您的其他问题一样,创建一个具有额外参数
last的内部 rec 函数。将其与列表的当前头部进行比较,如果相等,则不要添加。 -
另一个提示:为列表编写递归函数时,从内部的 rec 函数开始,除了再次构建相同的列表之外什么都不做。这将反转列表,因此在末尾添加
List.rev。然后添加业务逻辑。希望这能让你朝着正确的方向前进。 -
我不会太担心编写内部函数,我会专注于案例....一个空列表 -> 一个空列表...正确....一个列表包含 1 个元素 -> 包含 1 个元素的列表...包含 2 个或更多元素的列表...请考虑如果第一个两个元素相同会发生什么,然后考虑如果它们不同会发生什么。
标签: list functional-programming f#