如何从多重集的所有元素中提取数据?
How can I extract data from all elements of a multiset?
假设我有一个名为 dtyp
的数据类型。看起来像这样
datatype dtype = T bool int
我想定义一个函数 extr :: "dtype multiset => int multiset"
,它采用这些 dtype
元素的多重集和 returns 包含每个 dtype
中的整数的多重集元素。例如:
value "extr {#T True 4, T False 5, T False 7#}"
应该给 {#4,5,7#}
我首先想到遍历多重集,但我知道这是不可能的,因为这些多重集基于不可迭代的普通集。然后我想到了通用量词,但我不确定在这种情况下如何使用它们。我可以帮忙吗?
提前致谢!
一些用于直接定义提取器的奇特语法:
datatype dtype = T bool (payload: int)
考虑集合是一个很好的起点:您正在寻找 image
的多重集合。该函数存在,它被称为 image_mset
。所以:
definition extr :: "dtype multiset => int multiset" where
"extr = image_mset payload"
语法 `# for image_mset 尚未添加到 Multiset 条目中,但它已被各种人使用。
notation image_mset (infixr "`#" 90)
假设我有一个名为 dtyp
的数据类型。看起来像这样
datatype dtype = T bool int
我想定义一个函数 extr :: "dtype multiset => int multiset"
,它采用这些 dtype
元素的多重集和 returns 包含每个 dtype
中的整数的多重集元素。例如:
value "extr {#T True 4, T False 5, T False 7#}"
应该给 {#4,5,7#}
我首先想到遍历多重集,但我知道这是不可能的,因为这些多重集基于不可迭代的普通集。然后我想到了通用量词,但我不确定在这种情况下如何使用它们。我可以帮忙吗?
提前致谢!
一些用于直接定义提取器的奇特语法:
datatype dtype = T bool (payload: int)
考虑集合是一个很好的起点:您正在寻找 image
的多重集合。该函数存在,它被称为 image_mset
。所以:
definition extr :: "dtype multiset => int multiset" where
"extr = image_mset payload"
语法 `# for image_mset 尚未添加到 Multiset 条目中,但它已被各种人使用。
notation image_mset (infixr "`#" 90)