我有一个像这样返回int list list list
的函数:
[[[1;2;3];[4;5];[]]]
并希望它返回该列表,并删除一组方括号,如下所示:
[[1;2;3];[4;5];[]]
我到目前为止的代码是:
let rec shallow [lst] : ('a list list) =
match [lst] with
| [] -> ([]:'a list list)
| ([]:'a list list) -> [[]]
| [[]] -> []
| [lst] -> lst
| hd::tl::tl2 -> hd@tl@(shallow tl2);;
给出错误{引用案例[lst] -> (lst:'a list list)
}
“此表达式的类型为'列表,但表达式需要'列表列表'。
答案 0 :(得分:1)
请注意,如果您定义这样的函数:
<If "%{HTTP_HOST} != 'www.domain.com'">
Redirect "/" "https://www.domain.com/"
</If>
您的函数仅适用于长度为1的列表。对于任何其他输入,该函数将引发异常。编译器会警告你:
let f [x] = ...
你的实际问题在这里:
# let f [x] = x;;
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
[]
val f : 'a list -> 'a = <fun>
您的输入属于| ([]:'a list list) -> [[]]
类型,因此应将其更改为:
'a list list list
(但你可能还需要考虑一下函数输入和输出的确切形式。)
答案 1 :(得分:0)
感谢Jeffrey Scofield给我提示我需要回答的问题:
let rec shallow (lst:'a list list list) : ('a list list) =
match lst with
| [] -> []
| h::t -> h@(shallow t);;