如何在Typed Racket中定义Union多态数据结构的实例?

tli2020

在《类型球拍指南》中,要定义联合类型,只需使用即可(define-type Some-Type (U Type1 Type2))

要定义多态数据结构,请使用(define-type (Opt a) (U ...))

我想定义一个多态的二叉树

(define-type (Tree a) (U (Leaf a) Node))
(struct (a) Leaf ([val : a]))
(struct Node ([left : Tree] [right : Tree]))
(define t1 (Leaf 5))
(define t2 (Leaf 8))
(define t3 (Node t1 t2))

我想知道为什么t1的类型Leaf不是Tree,如何使它成为a Tree

> t1
- : (Leaf Positive-Byte)
#<Leaf>
亚历克斯·克纳特

执行此操作时:

(define-type (Tree a) (U (Leaf a) Node))

您正在定义Tree为类型构造函数。您不应将Tree自身视为类型,而应将其视为(Tree Some-Concrete-Type)类型。因此,将其重命名为Treeof

(define-type (Treeof a) (U (Leaf a) Node))
(struct (a) Leaf ([val : a]))
(struct Node ([left : Treeof] [right : Treeof]))

现在问题更加清楚了。节点结构期望a Treeof,但是树是什么?您想要的是:

(define-type (Treeof a) (U (Leaf a) (Node a)))
(struct (a) Leaf ([val : a]))
(struct (a) Node ([left : (Treeof a)] [right : (Treeof a)]))

现在您的示例起作用了:

#lang typed/racket
(define-type (Treeof a) (U (Leaf a) (Node a)))
(struct (a) Leaf ([val : a]))
(struct (a) Node ([left : (Treeof a)] [right : (Treeof a)]))
(define t1 (Leaf 5))
(define t2 (Leaf 8))
(define t3 (Node t1 t2))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Typed Racket 中连接数据库?

来自分类Dev

如何在Typed Racket中编写以多态函数作为参数的高阶函数?

来自分类Dev

如何在Typed JS中永久隐藏光标

来自分类Dev

Akka 2.6如何在Akka Typed中读取`Dead Letters`?

来自分类Dev

如何在Typed HttpClient的示例中实现IHttpFactoryClient?

来自分类Dev

如何在自定义数据结构中实现begin()成员函数?

来自分类Dev

如何在嵌套方法定义中引用对象数据结构?

来自分类Dev

如何在c中使用自定义类型从节点列表中读取数据结构

来自分类Dev

如何在PHP中创建类似数据结构的集合?

来自分类Dev

如何在PowerShell中遍历JSON数据结构?

来自分类Dev

如何在PHP中创建类似数据结构的集合?

来自分类Dev

如何在JavaScript中创建数据结构?

来自分类Dev

您如何在Clojure的core.typed中注释多态核心功能?

来自分类Dev

如何在Racket中测试两个结构实例是否具有相同的结构类型?

来自分类Dev

如何在Racket中测试两个结构实例是否具有相同的结构类型?

来自分类Dev

如何使用集合或集合在 Java 中的数据结构中组织数据结构?

来自分类Dev

如何在Karate中为数据驱动的测试准备嵌套的数据结构?

来自分类Dev

以下数据如何存储在适当的数据结构中?

来自分类Dev

如何使Typed Racket的类型检查器更快?

来自分类Dev

如何使Typed Racket的类型检查器更快?

来自分类Dev

如何在python中访问复杂数据结构中的某些元素

来自分类Dev

如何从Erlang中的文件中读取数据结构?

来自分类Dev

如何在PostgreSQL中建模多态数据

来自分类Dev

如何在Python中确定嵌套数据结构的类型?

来自分类Dev

如何在clojure中打印一个非常大的数据结构?

来自分类Dev

如何在Matlab中预分配外部数据结构列表?

来自分类Dev

如何在Java中实现我自己的LinkedList <LinkedList>数据结构?

来自分类Dev

如何在OpenCV中多次初始化Mat数据结构

来自分类Dev

您如何在groovysh中声明和使用Set数据结构?

Related 相关文章

  1. 1

    如何在 Typed Racket 中连接数据库?

  2. 2

    如何在Typed Racket中编写以多态函数作为参数的高阶函数?

  3. 3

    如何在Typed JS中永久隐藏光标

  4. 4

    Akka 2.6如何在Akka Typed中读取`Dead Letters`?

  5. 5

    如何在Typed HttpClient的示例中实现IHttpFactoryClient?

  6. 6

    如何在自定义数据结构中实现begin()成员函数?

  7. 7

    如何在嵌套方法定义中引用对象数据结构?

  8. 8

    如何在c中使用自定义类型从节点列表中读取数据结构

  9. 9

    如何在PHP中创建类似数据结构的集合?

  10. 10

    如何在PowerShell中遍历JSON数据结构?

  11. 11

    如何在PHP中创建类似数据结构的集合?

  12. 12

    如何在JavaScript中创建数据结构?

  13. 13

    您如何在Clojure的core.typed中注释多态核心功能?

  14. 14

    如何在Racket中测试两个结构实例是否具有相同的结构类型?

  15. 15

    如何在Racket中测试两个结构实例是否具有相同的结构类型?

  16. 16

    如何使用集合或集合在 Java 中的数据结构中组织数据结构?

  17. 17

    如何在Karate中为数据驱动的测试准备嵌套的数据结构?

  18. 18

    以下数据如何存储在适当的数据结构中?

  19. 19

    如何使Typed Racket的类型检查器更快?

  20. 20

    如何使Typed Racket的类型检查器更快?

  21. 21

    如何在python中访问复杂数据结构中的某些元素

  22. 22

    如何从Erlang中的文件中读取数据结构?

  23. 23

    如何在PostgreSQL中建模多态数据

  24. 24

    如何在Python中确定嵌套数据结构的类型?

  25. 25

    如何在clojure中打印一个非常大的数据结构?

  26. 26

    如何在Matlab中预分配外部数据结构列表?

  27. 27

    如何在Java中实现我自己的LinkedList <LinkedList>数据结构?

  28. 28

    如何在OpenCV中多次初始化Mat数据结构

  29. 29

    您如何在groovysh中声明和使用Set数据结构?

热门标签

归档