Types 怎样打拍子';s型推理工作?

Types 怎样打拍子';s型推理工作?,types,racket,type-inference,typed-racket,Types,Racket,Type Inference,Typed Racket,类型化的Racket做什么类型的推理?我在Racket邮件列表中找到了以下片段: 类型化的球拍类型系统包含许多功能 除了Hindley/Milner风格的类型系统所支持的之外,等等 我们不能使用那个推理系统。目前,打字球拍使用 本地类型推断来推断程序中的许多类型,但是 我们想推断出更多——这是一个正在进行的研究领域 研究 上面的简介使用了术语“局部类型推断”,我也听说“事件类型”使用了很多,但我不确定这些术语的确切含义 在我看来,TypedRacket目前使用的类型推断系统不必要地弱。这里有一个

类型化的Racket做什么类型的推理?我在Racket邮件列表中找到了以下片段:

类型化的球拍类型系统包含许多功能 除了Hindley/Milner风格的类型系统所支持的之外,等等 我们不能使用那个推理系统。目前,打字球拍使用 本地类型推断来推断程序中的许多类型,但是 我们想推断出更多——这是一个正在进行的研究领域 研究

上面的简介使用了术语“局部类型推断”,我也听说“事件类型”使用了很多,但我不确定这些术语的确切含义

在我看来,TypedRacket目前使用的类型推断系统不必要地弱。这里有一个例子来说明我的意思。以下内容不进行类型检查:

(struct: pt ([x : Real] [y : Real]))

(define (midpoint p1 p2)
  (pt (/ (+ (pt-x p1) (pt-x p2)) 2)
      (/ (+ (pt-y p1) (pt-y p2)) 2)))

必须使用
(:middpoint(pt pt->pt))
显式注释
中点,否则会出现错误:
类型检查器:预期的pt,但在:p1
中有任何。为什么类型检查器不能由此得出结论,
p1
p2
的类型必须是
pt
?这是Racket实现类型方式的一个基本限制(即,由于Racket的一些更高级的类型功能,这条推理路线有时实际上是错误的),还是将来可能实现的?

默认情况下,假定未注顶层函数的输入和输出类型为
Any
。我给出了一个模糊的解释:由于Racket的类型系统非常灵活,它有时可以推断出您意想不到的类型,并允许一些程序在您希望它们发出类型错误时进行类型检查

切线:如果适合您,您还可以使用
定义:
表单

(define: (midpoint [p1 : pt] [p2 : pt]) : pt
  ...)

山姆·托宾·霍克施塔特的博士论文应该有血淋淋的细节:再加上这个答案:我会在一周中的任何一天都把“定义明确”置于“聪明”之上。“聪明”的问题在于,作为一名程序员,你迟早会在可检查和不可检查之间的边界的另一边,你必须弄清楚如何更改代码,以便检查者能够验证它。在这样的情况下,试图凭直觉判断哪种聪明能吸引人是非常困难的。因此,听起来似乎并没有根本的限制——相反,在类型良好的程序和类型不好的程序之间,只有一个模糊的灰色区域(可能这种类型的球拍比其他类型的球拍更大,因为球拍系统非常灵活).设计类型化Racket推理的人只是尽可能远离这一界限:只有少数定义明确的情况下可以进行类型推理,其他一切都必须明确声明。这样,他们就避免陷入混乱。这是正确的吗?@Ord这是正确的。你可以阅读Sam的dis他甚至用其中的一节来回答这个问题:第3.2节。