1

这个简单的功能

let s =
    function
    | [] -> [[]]
    | list -> []::list

具有类型('a List List -> 'a List List)。因此,由于 'a 是通用的,它接受任意深度的列表作为参数。我的问题是我总是必须指定输入列表的深度,否则 F# 交互会抱怨。例如

s []

将无法工作

s ([]: int List List)

将要。相似地,

s [[[]]]

不会工作,但

s ([[[]]]:int List List List)

做。那么,这只是一个例子,有什么方法可以避免这种显式输入?

谢谢

4

1 回答 1

0

这是问题所在。什么是类型

s [[[]]]

它是't list list。由于一些潜在的 .NET 限制,这样的值不能存在。你需要做't混凝土。

有很多关于 F# 值限制的优秀教程,最好的解决方案是稍后在同一个文件中使用您的结果,或者提供一些其他方式来进行推理以提供具体类型。

于 2013-05-23T12:23:41.570 回答