在打字球拍中有没有一种惯用的表达Null的方法



我想在typed/rack中使用struct定义一个类型。例如:

(struct a-node 
([line : ProgLine]
[latency : Integer]
[pred-edges : (List Edge)]
[succ-edges : (List Edge)])
#:mutable
#:type-name Node)

假设我想用some('((|void |#f|…(初始化某个字段(例如line(值,然后稍后更新字段(a-node-line(。我已经在搜索引擎上寻找了一种惯用的方法,同样,在这里,我也没有找到满意的答案。我尝试过例如:

[line : (U ProgLine Void)]

但这导致了代码的尴尬。我玩过可能使用monad的游戏,但这也不是我想要的。它对某些用例来说很好,但有时并不合适。我已经写了大量的scheme(其中可以表示{#f}或{'((}(,但没有太多的麻烦。我的静态类型语言背景属于C族,在C族中可以表示{null}。有这样的";简单的";类型球拍中指针变量nil的表示方法?

对于上下文,我正在为编译器的后端构建一个调度器,Node用于依赖关系图中的节点。这些节点结构将是相邻列表表示(双向(的相邻列表向量的哨兵/列表头。我在程序IR上以线性方式构建图。在顶部之前->在IR的底部遍历中,我想初始化邻接向量,然后在构建图的过程中更新Node结构。

但我对一般情况下的问题很感兴趣,因为我现在在用打字/球拍写作时遇到过太多次了。。。

惯用方法是使用Option类型,您可以在此处的文档中找到它。

注意,这基本上相当于使用CCD_;空";值的版本。Racket还有一个很好的性质,即除了#f之外的任何值都是真实的,所以我们可以检查";零度";通过做:

(if my-value
"value-case"
"null-case")

相关内容

最新更新