代码之家  ›  专栏  ›  技术社区  ›  Adrian keiter

Scala中的类型系统是图灵完备的。证据?例子?福利?

  •  53
  • Adrian keiter  · 技术社区  · 15 年前

    1. 这有正式的证据吗?

    2. 在Scala类型系统中,简单的计算是什么样子的?

    3. 这对Scala语言有什么好处吗?这是否使Scala在某种程度上比没有图灵完整类型系统的语言更“强大”?

    2 回复  |  直到 15 年前
        1
  •  37
  •   Jörg W Mittag    15 年前

    在某个地方有一篇博客文章,里面有一个SKI组合演算的类型级实现,它被称为Turing complete。

    类型级计算的一个例子是Scala 2.8中的新型保留类型的集合转换器。在Scala 2.8中,方法如下 map , filter 滤波器 一 Set[Int] ,你会得到一个 集合[Int] 如果你 地图 一 List[String] 你回来一个 List[Whatever the return type of the anonymous function is]

    现在,如你所见, 地图 实际上可以转换元素类型。那么,如果新元素类型不能用原始集合类型表示,会发生什么情况?示例:a BitSet BitSet[Short] 你把每个数字映射成它的字符串表示?

    someBitSet map { _.toString() }
    

    将 成为 BitSet[String] ,但那是不可能的。因此,Scala选择了 位集合 String ,在本例中是 Set[String] .

    编译时 ,或者更准确地说 类型检查时间 ,使用类型级函数。因此,它在静态上保证是类型安全的,即使这些类型实际上是经过计算的,因此在设计时是未知的。

        2
  •  34
  •   michid    15 年前

    我的 blog post 对Scala型系统中的SKI演算进行编码,证明了图灵完备性。

    对于一些简单的类型级计算,也有一些关于如何编码自然数和加法的示例/ multiplication .

    series of articles 在Apocalisp的博客上进行类型级编程。

    推荐文章