1
Here是完整的规则,但作为一个简单的例子,如果A
与'a list list list
类型和f
与'a list -> 'b
类型的功能的3D阵列,我想的函数map'
这需要升降机f
键入'a list list list -> 'b list list
。对于具体的例子,map'
将相当于该代码:,如何使用NumPy类广播为多维数组编写'map'?
fun map' fList aListListList = map (fn aListList => map fList aListList) A
除,当然,我想这map'
不管工作有多少尺寸A
了。我在编写类型签名时遇到了麻烦,这往往表明我做错了。
编辑:这是一个怎样的解决方法?
fun map' levels f A =
if levels < 1
then return f(A)
else return map' (levels - 1) f A
啊,我怀疑但不确定。你认为如何让用户指定他想要递减多少级别?它稍微不方便,仍然会打破类型检查,但至少它会产生正确的输出。还是有更好的方法来获得所需的行为? – Wang 2011-06-12 02:52:24
@Wang:让用户指定深度看起来不错,但您仍然需要自定义数据类型。另外请注意,您在编辑中发布的代码将无法正常工作,因为a)sml中没有返回关键字,并且b)您只调用一次f而根本不建立列表。 – sepp2k 2011-06-12 03:07:18