在SML中,如何为类似NumPy的广播编写多维数组的“地图”?

| 这里是完整的规则,但是作为一个简单的示例,如果
A
是类型为
\'a list list list
的3D数组,而
f
是类型为
\'a list -> \'b
的函数,我希望将lift2ѭ提升为
\'a list list list -> \'b list list
的函数
map\'
。对于特定示例,
map\'
等效于以下代码:
fun map\' fList aListListList = map (fn aListList => map fList aListList) A
当然,除了
map\'
有多少尺寸外,我都希望
map\'
能工作。我在写类型签名时遇到麻烦,这通常表明我做错了。 编辑:这是一种解决方法?
fun map\' levels f A = 
  if levels < 1
  then return f(A)
  else return map\' (levels - 1) f A
    
已邀请:
        您在选择正确的类型时遇到了问题,因为此功能的正确类型无法在SML的类型系统中表示。您不能像这样对嵌套列表的嵌套深度进行抽象。所需的功能根本无法用SML表示。 您唯一可以做的就是为嵌套列表定义自己的类型,然后编写函数
map\' : (\'a list -> \'b) -> \'a nestedlist -> \'b nestedlist
。但是,您可以看到
nestedlist
的嵌套深度不会按其类型进行编码,
map\'
不会从其类型中完全消除一层可见的嵌套(或由编译器验证)这一事实。     

要回复问题请先登录注册