Scala 执行lambda演算每条边的唯一可能性的代码
我无法比维基百科更好地解释这个词: […]λ-立方体是一个框架,用于探索 Coquand的构造演算,从简单类型开始 lambda演算作为放置在原点的立方体的顶点 构造演算(高阶依赖型多态) (lambda演算)作为其完全相反的顶点。每个轴 多维数据集代表了一种新的抽象形式:Scala 执行lambda演算每条边的唯一可能性的代码,scala,language-agnostic,types,theory,lambda-calculus,Scala,Language Agnostic,Types,Theory,Lambda Calculus,我无法比维基百科更好地解释这个词: […]λ-立方体是一个框架,用于探索 Coquand的构造演算,从简单类型开始 lambda演算作为放置在原点的立方体的顶点 构造演算(高阶依赖型多态) (lambda演算)作为其完全相反的顶点。每个轴 多维数据集代表了一种新的抽象形式: 术语取决于类型或多态性。系统F,也称为二阶lambda演算,仅通过施加此属性即可获得 类型取决于类型或类型运算符。具有类型算子λω的简单型lambda演算是通过施加 这是我的财产。它与系统F结合,得到系统Fω 类型取决于术
- 术语取决于类型或多态性。系统F,也称为二阶lambda演算,仅通过施加此属性即可获得
- 类型取决于类型或类型运算符。具有类型算子λω的简单型lambda演算是通过施加 这是我的财产。它与系统F结合,得到系统Fω
- 类型取决于术语,或依赖类型。仅施加此属性即可产生λ∏,一种与LF密切相关的类型系统
- Agda有依赖类型,但Haskell没有。因此,在Agda中,我们可以使用列表的长度参数化列表:
这在哈斯克尔是不可能的data Nat : Set where zero : Nat succ : Nat -> Nat data Vec (A : Set) : Nat -> Set where empty : Vec zero cons : (n : Nat) -> A -> Vec n -> Vec (succ n)
- Scala比Java更好地支持类型运算符。因此,在Scala中,我们可以在类型运算符上参数化类型:
这在Java中是不可能的class Foo[T[_]] { val x: T[Int] val y: T[Double] }
- Java1.5比Java1.4更好地支持多态性。因此,自Java 1.5以来,我们可以参数化类型上的方法:
public static <A> A identity(A a) { return a; }
这在Java1.4中是不可能的公共静态A标识(A){ 返回a; }
我认为这样的例子可以帮助理解lambda立方体,lambda立方体可以帮助理解这些例子。但这并不意味着这些例子涵盖了关于lambda多维数据集的所有知识,或者lambda多维数据集涵盖了这些语言之间的所有差异。这可能更适合@Inuyasha,尽管它显然是关于计算机科学理论的,它还涉及到在编程语言中实际实现这一点。我不认为这是“计算机科学中的一个研究级问题”,因此不属于cstheory。所有这些变量都是强正规化的,因此不是图灵完全的。您建议的语言是图灵完整的,因此这将是一个有点像方钉/圆孔的任务,不是吗?@Gian:???这些语言在其类型系统中实现了上述改进的部分或部分。我希望看到使用这些可能性的代码。我认为您需要更精确地描述“不可能实现”。这些系统在很大程度上相互嵌入,因此它们不同的主要特性是可处理性和我们可以对这些语言中的术语进行的推理类型。我不确定这将如何映射到Java、Scala、Haskell等在这些属性方面又有所不同的语言。