我很好奇。我一直在OCaml中处理此数据类型: type 'a exptree = | Epsilon | Delta of 'a exptree * 'a exptree | Omicron of 'a | Iota of 'a exptree exptree 可以使用显式类型的递归函数(最近添加的功能)进行操作。例: let rec map : 'a 'b. ('a -> 'b) -> 'a exptree -> 'b exptree = fun f -> begin function | Epsilon -> …
在程序设计语言的概念,约翰米切尔写道,静态类型检查是必要的保守(过于严格的),因为停机问题。他举了一个例子: if (complicated-expression-that-could-run-forever) then (expression-with-type-error) else (expression-with-type-error) 有人可以提供一个确实会引起实际关注的非故意答案吗? 我了解到Java允许针对以下情况进行动态检查的类型转换: if (foo instanceof Person) { Person p = (Person) foo; : } 但我认为这是Java语言/编译器缺陷的必要,而不是跨语言问题。