gpt4 book ai didi

list - F# 返回列表长度列表

转载 作者:行者123 更新时间:2023-12-02 08:04:26 25 4
gpt4 key购买 nike

我将使用组合器,不使用 for/while 循环、递归或 F# 列表模块中定义的库函数,构造函数::和 [] 除外

理想情况下我想实现 map

我正在尝试编写一个名为 llength 的函数,它返回子列表的长度列表。例如 llength [[1;2;3];[1;2];[1;2;3]] 应该返回 [3;2,3]。我还有返回列表长度的函数 length。

let Tuple f = fun a b -> f (a, b)
let length l : int =
List.fold (Tuple (fst >> (+) 1)) 0 l

目前有

let llength l : int list =
List.map (length inner list) list

不确定我应该如何尝试使用我的限制访问我的子列表,我应该在每个子列表上使用我的其他方法吗?非常感谢任何帮助,谢谢!

最佳答案

因为这是作业,我不想只给你一个完整的编码解决方案,但这里有一些提示:

首先,由于允许使用fold,您可以通过fold 实现map。折叠函数将获取“到目前为止”累积的列表,并在使用映射函数转换的下一个元素之前添加。尽管结果会反转(fold 向前遍历,但你在每一步都预先考虑),所以如果你不允许 List.rev.

第二种 - 最明显、最基本的方法:裸递归。思考方式如下: (1) 当参数为空列表时,结果应为空列表; (2) 当参数为非空列表时,结果应该是参数头部的长度加上参数尾部长度的列表,可以递归计算。尝试用 F# 将其写下来,这将是您的解决方案。

关于list - F# 返回列表长度列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com