gpt4 book ai didi

ocaml - 在 sml 中使用折叠程序

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

fun Dbt (nil,_) =  nil
| Dbt (x::xs,y::ys) = (x::y)::(Dbt(xs,ys))
| Dbt (x::xs,nil) = [x]::(Dbt(xs,nil));

有没有办法通过使用高阶和/或在 sml 中的内置函数中非递归地定义此函数?我已经尽我所能,但似乎我不会去任何地方。任何想法将不胜感激谢谢..

最佳答案

由于您不是消费列表而是生产它们,因此您将无法使用通常的列表遍历运算符(映射、过滤、折叠... ).

然而,对于列表生成,有一个常见且易于理解的组合器,它是

val unfold : ('a -> ('a * 'b) option) -> 'a -> 'b list

不幸的是,基本 SML 库中没有此运算符,因此您可能必须自己定义它。

fun Dbt (xs, ys) =
let fun Step (nil, _) = NONE
| Step (x::xs, y::ys) = SOME (x::y,(xs,ys))
| Step (x::xs, nil) = SOME ([x], (xs,nil))
in unfold Step (xs, ys)

关于ocaml - 在 sml 中使用折叠程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19508078/

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