idris - 约束依赖类型的集合以匹配 args 和 return
问题描述
我想编写一个函数,它接收一个依赖类型的集合(我不太在意哪种类型),并返回另一个相同类型但可能具有不同值的集合。元素的形式
data Tensor : (Vect r Nat) -> Type where
例如,一个接受(Tensor [2, 3, 4], Tensor [2], Tensor [])
or(Tensor [3],)
并返回相同类型值的函数。
我试过的
- 使用依赖对:接受一个
List (s ** Tensor s)
. 然后我不知道如何将输出限制为具有相同的类型。 - 使用元组,但我不确定如何将元素类型修复为
Tensor
解决方案
您可以编写一个由所有 s 的完整形状索引的函数Tensor
,而不仅仅是其中的任何一个。每个的形状Tensor
是 a List Nat
,所以它们列表的形状是 a List (List Nat)
:
import Data.Vect
data Tensor : (Vect r Nat) -> Type where
data Tensors : List (List Nat) -> Type where
Nil : Tensors []
Cons : Tensor (fromList ns) -> Tensors nss -> Tensors (ns :: nss)
这是一个形状保持map
功能的示例:
mapTensors
: ({0 r : Nat} -> {0 ns : Vect r Nat} -> Tensor ns -> Tensor ns) ->
Tensors nss -> Tensors nss
mapTensors f Nil = Nil
mapTensors f (Cons t ts) = Cons (f t) (mapTensors f ts)
推荐阅读
- php - 在 codeigniter 中创建自定义库时出错 - 消息:未定义的属性:Welcome::$MyLib
- ios - 如何快速在 IQKeyboardManagerSwift 上添加 datepickerview
- typescript - 无法使用量角器从自动完成中选择值
- java - 嵌套循环问题/循环 2 次,并且在 switch case 中默认运行
- wordpress - Wordpress 内存限制增加 .htaccess 文件的问题
- python - 我们可以更改 pandas 交叉表吗?
- java - 如何使用java仅从字符串列表中获取数字
- amazon-web-services - 使用 create_export_task 将日志从 cloudwatch 导出到 s3 不会丢失一些日志
- mongodb - Node.js Mongoose:值不代表设置的数据,但数据库已更改
- php - Wordpress - WooCommerce - 在桌面外显示“添加订单注释”表单