Types 同象型理论

Types 同象型理论,types,programming-languages,functional-programming,homoiconicity,Types,Programming Languages,Functional Programming,Homoiconicity,Lisp具有同音符号的特性,也就是说,语言实现(列表)所使用的代码表示也可用于希望表示代码以用于其自身目的的程序,并由这些程序惯用 函数式编程语言的另一个主要家族ML是基于类型理论的,这意味着语言实现需要更复杂的代码表示,并且对允许执行的操作也不太随意,因此通常程序无法使用内部表示。例如,高阶逻辑的证明检查器通常在ML系列语言中实现,但通常实现它们自己的类型理论系统,实际上忽略了ML编译器已经有一个类型理论系统的事实 有例外吗?任何基于类型理论的编程语言,都可以公开其代码表示以供编程使用吗 函数

Lisp具有同音符号的特性,也就是说,语言实现(列表)所使用的代码表示也可用于希望表示代码以用于其自身目的的程序,并由这些程序惯用

函数式编程语言的另一个主要家族ML是基于类型理论的,这意味着语言实现需要更复杂的代码表示,并且对允许执行的操作也不太随意,因此通常程序无法使用内部表示。例如,高阶逻辑的证明检查器通常在ML系列语言中实现,但通常实现它们自己的类型理论系统,实际上忽略了ML编译器已经有一个类型理论系统的事实

有例外吗?任何基于类型理论的编程语言,都可以公开其代码表示以供编程使用吗

函数式编程语言的另一个主要家族。。。基于类型理论,这意味着语言实现需要更复杂的代码表示

我看不出这是真的


如果您还没有看过,您可能会对Liskell感兴趣,它自称为
Haskell语义+Lisp语法

Lisp作为同音符号的主要好处是强大的元编程能力。我想您可能想看一看类型安全元编程,尤其是。

看一看用于分阶段执行的类型系统(元编程的一种弱形式),例如,MetaML语言中使用的类型系统

还要注意的是,虽然乍一看很吸引人,但同源性(以及通常通过直接AST操作进行的元编程)在实践中却很不方便。看看Nemerle中的现代宏系统和Scala的实验扩展,如果我没记错的话,它们都依赖于准引号

至于为什么不重用ML类型理论,这里有一些注意事项:

  • ML类型系统没有足够的表达能力(考虑依赖类型)
  • ML类型系统被通用递归和可变引用所污染
  • 对于哪种类型的系统可用于证明和编写通用程序,目前还没有一致的意见。这是一项正在进行的研究。例如,见。所以每个证明者都实现了自己的理论,仅仅因为作者修复了以前类型理论中的缺陷
: Shen拥有函数式编程中最强大的类型系统之一。Shen在精简指令Lisp下运行,并为可移植性而设计

例如:


: 类型化Racket是一个语言家族,每种语言都要求用该语言编写的程序遵守一个类型系统,以确保没有许多常见错误

例如:


: Mercury是一种逻辑/函数式编程语言,它将声明式编程的清晰性和表达性与高级静态分析和错误检测功能相结合

例如:

有例外吗?任何基于类型理论的编程语言,都可以公开其代码表示以供编程使用吗


SML不以编程方式公开代码,但OCaml和F#以编程方式公开代码。OCaml有一个完整的宏系统。

“同源性(以及通常通过直接AST操作进行的元编程)在实践中被证明是不方便的”您能详细说明/指出这一说法的证据吗?“Lisp作为同源性的主要好处是强大的元编程能力”。元语言(ML)家族的语言,如SML和OCaml,正是因为这不是真的,才放弃了同源性。
(define total
  {(list number) --> number}
  [] -> 0
  [X | Y] -> (+ X (total Y)))
#lang typed/racket
(: sum-list (-> (Listof Number) Number))
(define (sum-list l)
  (cond [(null? l) 0]
        [else (+ (car l) (sum-list (cdr l)))]))
:- func sum(list(int)) = int.   
sum([]) = 0.
sum([X|Xs]) = X + sum(Xs).