作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个列表:
let a = ["a";"b"];
let b = ["c";"d"];
我想要一个输出列表 c,例如:
c = ["a";"c";"a";"d";"b";"c";"b";"d"];
由于列表是不可变的,如何在 ocaml 中做到这一点?我是新手。
最佳答案
您将返回一个新列表。如果您确实对列表的笛卡尔积感兴趣,那么这应该足够了:
let cartesian l l' =
List.concat (List.map (fun e -> List.map (fun e' -> (e,e')) l') l)
# cartesian ["a";"b"] ["c";"d"];;
- : (string * string) list = [("a", "c"); ("a", "d"); ("b", "c"); ("b", "d")]
如果您需要那种奇怪的平面结构,您可以使用额外的列表串联。
let flat_cartesian l l' =
List.concat (List.concat (
List.map (fun e -> List.map (fun e' -> [e;e']) l') l))
关于list - 如何在 OCaml 中取两个列表的乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893521/
我是一名优秀的程序员,十分优秀!