- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 combine
函数,给定一个列表元组,返回一个元组列表:
let rec combine =
fun (l1, l2) ->
match (l1, l2) with
| ([], []) -> []
| (x::xs, y::ys) -> (x, y)::(combine xs ys)
然后我构建了一个类似的函数 foo56
,它的工作方式相同,但有四个列表而不是两个。
let rec foo76 = //Combine a 4-tuple of lists in a list of 4-tuples
fun (l1, l2, l3, l4) ->
match (l1, l2, l3, l4) with
([], [], [], []) -> []
| (x::xs, y::ys, z::zs, t::ts) ->
(x, y, z, t)::(foo76 (xs, ys, zs, ts))
问题:我想实现 foo56
以使其通过 combine
工作。我做了几次尝试,都失败了。这是最(叹息)最有前途的:
let foo76combine = //Combine a 4-tuple of lists in a list of 4-tuples
fun (l1, l2, l3, l4) ->
match (l1, l2, l3, l4) with
([], [], [], []) -> []
| (x::xs, y::ys, z::zs, t::ts) ->
(x, y, z, t)::(combine(combine(combine (xs, ys) zs) ts))
我无法想象如何正确地将 combine
递归地嵌套在自身中。我想这可能是由于我缺乏经验。至少我是在正确的道路上吗?它不仅仅是让 foo76
工作。我有兴趣更好地掌握这种方法的实际应用,在那里我可以将问题分解成更小的部分。
最佳答案
你不能通过简单地编写combine
来得到你想要的。 .最里面combine
将按预期工作,产生 ('a * 'b) list
, 但下一个需要 ('a * 'b) list
和一个 'c list
, 产生 (('a * 'b) * 'c)) list
, 而不是 ('a * 'b * 'c) list
你想看到的。
元组根本不是那样工作的——你不能概括为“任意长度的元组”。这就是为什么有单独的 List.zip
和 List.zip3
功能,而不是一般的List.zipN
.如果您想处理不同大小的元组,则需要为它们提供不同且独立的函数。
您可以通过将生成的“嵌套”元组映射到 4 元组来稍微弥补这一点,但是重用 combine
会得到什么?在我看来不值得麻烦 - 与 foo76
这样的专用函数相比,它更难阅读且性能更差:
let rec zip4 (l1, l2, l3, l4) =
match l1, l2, l3, l4 with
| [], [], [], [] -> []
| x::xs, y::ys, z::zs, t::ts ->
(x, y, z, t) ::
(List.map
(fun (((a,b),c),d) -> (a,b,c,d))
(combine(combine(combine(xs, ys), zs), ts)))
关于f# - 合理嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109673/
我有一个曾经是 TreeView 控件的菜单,但现在我想让每个项目更加直观,并向树中的每个对象添加更多信息。 我的第一个意图是制作一个代表项目的用户控件,并在运行时将它们添加到面板中。这是一个好方法吗
我是 Docker 新手,想知道是否有可能(并且是一个好主意)在 Docker 容器中进行开发。我的意思是创建一个容器,执行 bash,安装和配置我需要的一切,然后开始在容器内进行开发。 容器将成为我
在 Java 中: Parent obj = new Child(); 我创建了一个 Parent 类型的对象。我假设我只能调用父类中定义的方法。因此,我无法调用 Child 中定义的“附加”方法或访
注意:我省略了其他两个阶段(V 和 W)的代码,示例中不需要。 我很确定,我这样处理“开”和“关”时间的方式并不是一种有效的方式。 我想使用查找表实现“开”和“关”脉动。计时器应与表的当前选定值进行比
当代码中包含 Java instanceof 运算符时,许多人会扬起眉毛并说这是禁忌。例如,在这个 other SO Q&A ,答案说: Note that if you have to use th
我是一名优秀的程序员,十分优秀!