如何解决在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 举报,一经查实,本站将立刻删除。