类型检查与类型推断

Type checking vs type inference

谁能解释一下类型检查类型推断问题之间的区别?

我曾尝试寻找差异,但找不到任何能清楚解释差异的令人信服的来源。如果可能,还包括示例。

给定代码:

(define (sum lst)
  (if (null? lst)
      0
      (+ (car lst) 
         (sum (cdr lst)))))

关于 lst 必须是什么或程序 return 类型,您有什么可以说的吗?编译器可能会做同样的事情,这将被称为类型推断。

类型检查是检查代码中指定的类型或推断的类型。如果代码中存在不一致,或者从推断它加起来不清楚,它将失败。