博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Racket 6.11提供了稳定的细化类型和依赖函数特性
阅读量:6985 次
发布时间:2019-06-27

本文共 1496 字,大约阅读时间需要 4 分钟。

Typed Racket是Racket语言的一种静态类型方言。为Typed Racket提供了细化类型(Refinement Type)和依赖函数(Dependent Function)特性。

\\

细化类型是一种关联了谓词(Predicate)的类型,所关联的谓词对于该类型的任一成员都成立。表述细化类型的通用语法是(Refine [v : t] p),定义了所有类型为t的值v满足谓词p。

\\

下面的函数给出了一个细化类型的基本例子,该函数确保了函数的返回值至少不小于每个输入值:

\\
(-\u0026gt; ([x : Integer] [y : Integer]) (Refine [z : Integer] (and (\u0026gt;= z x) (\u0026gt;= z y))))
\\

在Racket中,也可以设置细化谓词(Refinement Predicate)为一些程序条件(Term),使得细化类型依赖于这些条件的值。例如,下面定义的细化类型中,只包括整数42:

\\
\u0026gt; (ann 42 (Refine [n : Integer] (\u0026lt;= n 42)))
\\

依赖函数类型(Dependent Function Type)使用类似于细化类型的语法,指定了函数参数间的依赖关系,或参数与函数范围间的依赖关系。在依赖类型中,不允许存在循环依赖关系。例如,下面定义的函数,可在不越界条件的情况下访问向量中的成员:

\\
(: safe-ref1 (All (A) (-\u0026gt; ([v : (Vectorof A)]\                           [n : (v) (Refine [i : Natural]\                                (\u0026lt; i (vector-length v)))])\                            A)))
\\

当然,在函数签名中定义先决条件(Precondition)也可以达到同样的效果:

\\
(: safe-ref2 (All (A) (-\u0026gt; ([v : (Vectorof A)]\                           [n : Natural])\                          #:pre (v n) (\u0026lt; n (vector-length v))\                          A)))
\\

Typed Racket的创立者和维护者在InfoQ的访谈中,对此给出了如下解释:

\\
\

依赖类型特性使Typed Racket可以检查程序的属性,这是几乎所有其它的语言都做不到的。我们正使用这些新信息,探索可能对程序做出的这类改进。希望使用Typed Racket中的细化类型和依赖类型,能给出更快、更可靠的软件。

\
\\

在前期版本的Racket中,细化类型和依赖函数是以实验性特性提供的,现在已是默认提供。为获得最新的修复,建议用户定期更新到。如果用户想要进一步了解Racket 6.11中依赖类型的使用信息,一定要看一下。正是Kent在Tobin-Hochstadt的指导下完成了这些特性的主要工作。

\\

依赖类型是类型系统中的一个特性,它允许创建更具表达力的类型,以在编译时捕获更多软件缺陷。其它支持依赖类型的语言有Idris、Coq和F*。同时,。

\\

查看英文原文:

转载地址:http://whtpl.baihongyu.com/

你可能感兴趣的文章
JCheckBox使用示例
查看>>
LaTeX使用listings宏包插入代码时,将代码字体设为 Monaco
查看>>
设计模式之迭代子模式
查看>>
代码评审的不可能三角
查看>>
揭秘ThreadLocal
查看>>
七年蜕变 感恩献礼
查看>>
共享经济、短视频、新零售、AI:寻觅2019年新经济未来走向
查看>>
zabbix配置邮箱报警
查看>>
使用ulimit设置文件最大打开数
查看>>
[Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例EXPREGRESSION(模型)...
查看>>
VMware Data Recovery备份恢复vmware虚拟机
查看>>
solr多core的处理
查看>>
解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
查看>>
C# WinForm开发系列 - TextBox
查看>>
28岁少帅统领旷视南京研究院,LAMDA魏秀参专访
查看>>
java文件传输
查看>>
Xen虚拟机迁移技术
查看>>
安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法。
查看>>
[.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现...
查看>>
Icomparer和Icomparable集合排序
查看>>