【发布时间】:2016-10-01 00:29:08
【问题描述】:
我一直在尝试实现一个函数,该函数接受一个整数列表,然后返回一个非递减整数列表的列表。 即
let ls = [ 1;2;3;5;6;3;2;5;6;2]
I should get [[1;2;3;5;6];[3];[2;5;6];[2]]
我应该如何处理这个?我是函数式编程的菜鸟。
我能想到所需的步骤: 1.开始一个新的子列表,将每个元素与它旁边的元素进行比较。如果大于则添加到列表中。如果没有,则开始一个新列表,依此类推。
从到目前为止我从使用 f# 的函数式编程一书中学到的知识(我几天前刚开始阅读),我可能会使用模式匹配和递归函数来遍历比较两个元素的列表 像这样:
let rec nonDecreasing list =
match list with
| (x,y) :: xs when x <= y ->
我将如何使用模式匹配创建子列表? 还是我错误地处理了这个问题?
【问题讨论】:
-
方法正确
-
为什么吞下 3 却退回 2?例如。应该是:
[[1;2;3;5;6];[3];[2;5;6];[2]]? -
那是我的一个错误。你是对的
-
编辑了你的 Q 以反映缺失的问题 3. 你能整理一个隐居的版本吗?还是卡住了?
标签: f#