微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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\'
不会从其类型中完全消除一层可见的嵌套(或由编译器验证)这一事实。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。