目录
20 关系: 协变与逆变,头等函数,不动点组合子,微分算子,函数空间,函数指针,元数,Common Lisp,系统F,组合子逻辑,Elixir,Erlang,高阶逻辑,邱奇数,Io (编程语言),ISWIM,Λ演算,SAC编程语言,Snap!,控制流分析。
协变与逆变
协变与逆变是在计算机科学中,描述具有父/子型别关系的多个型别通过型别构造器、构造出的多个复杂型别之间是否有父/子型别关系的用语。.
查看 高阶函数和协变与逆变
头等函数
头等函数(first-class function)是指在程序设计语言中,函数被当作头等公民。这意味着,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中。 有人主张应包括支持匿名函数(函数字面量,function literals)。, by Michael Lee Scott, section 11.2 "Functional Programming".
查看 高阶函数和头等函数
不动点组合子
不动点组合子(Fixed-point combinator,或不动点算子)是计算其他函数的一个不动点的高阶函数。 函数 f 的不动點是將函數應用在輸入值 x 時,會傳回與輸出值相同的值,使得 f(x).
查看 高阶函数和不动点组合子
微分算子
在数学中,微分算子是定义为微分运算之函数的算子。首先在记号上,将微分考虑为一个抽象运算是有帮助的,它接受一个函数得到另一个函数(以计算机科学中高阶函数的方式)。 当然有理由不单限制于线性算子;例如施瓦茨导数是一个熟知的非线性算子。不过这里只考虑线性的情形。.
查看 高阶函数和微分算子
函数空间
在数学中,函数空间是从集合X到集合Y的给定种类的函数的集合。它叫做空间是因为在很多应用中,它是拓扑空间或向量空间或这二者。.
查看 高阶函数和函数空间
函数指针
函数指针是一种在C、C++、D语言、其他类 C 语言和Fortran 2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。 函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。.
查看 高阶函数和函数指针
元数
在邏輯、數學及電腦科學裡,函數或運算的元數是指所需的參數或運算元的數量。關係的元數則是指其對應之笛卡兒積的維度。 元數主要用在下面類型的函數之中:f: V → S,其中的V ⊂ Sn,且S是某個集合。此類函數通常稱為在S上的「運算」,且稱n是這個運算的元數。.
查看 高阶函数和元数
Common Lisp
Common Lisp,縮寫為CL(不是組合邏輯的縮寫)是Lisp編程語言的一種方言,由ANSI INCITS 226-1994(R2004)(前身為ANSI X3.226-1994(R1999)),所定義的語言規範標準。Common Lisp HyperSpec是源自於ANSI Common Lisp標準的網頁超連結版本。 CL語言是為標準化和改良Maclisp而開發的後繼者。到20世紀80年代初,幾個工作群組已經在設計MacLisp各種後繼者,例如:Lisp Machine Lisp(又名 ZetaLisp),Spice Lisp,NIL和S-1 Lisp。CL是為了標準化和擴展此前眾多的MacLisp分支而開發,它本身並非具體的實作,而是對語言設立標準的規範。有數個實作符合Common Lisp規範,其中包括自由和開源軟件,以及商業化產品。CL支援了結構化、函數式和物件導向編程等範式。相对于各种嵌入在特定产品中的语言,如Emacs Lisp和AutoLISP,Common Lisp是一種用途廣泛的编程语言。不同於很多早期Lisp,Common Lisp如同Scheme,其中的變量是預設為詞法作用域的。 身為一種動態編程語言,它有助於進化和增量的軟件開發,並將其迭代編譯成高效的執行程序。這種增量開發通常是互動持續地改善,而不需中斷執行中的應用程序。它還支援在後期的分析和優化階段添加可選的型別註記與轉型,使編譯器產生更有效率的代碼。例如在硬體和實作的支援範圍內,fixnum能保存一個未封裝整數,允許比大整數或任意精度類型更高效率的運算。同樣地,在每個模組或函數的基礎上可聲明優化,指示編譯器要編譯成哪一類型的安全級別。 CL包含了支援多分派和方法組合的物件系統,縮寫為CLOS,它通常以元物件(Metaobject)協定來實現。 CL藉由標準功能進行擴展,例如Lisp宏(编译时期程序自身完成的代码重排(compile-time code rearrangement accomplished by the program itself))和阅读器宏(赋予用户自定义的語法以扩展具特殊意义的符号(extension of syntax to give special meaning to characters reserved for users for this purpose))。 CL為Maclisp和约翰·麦卡锡的原創Lisp提供了一些向後兼容性。這允許較舊的Lisp軟件移植到Common Lisp之上。.
系统F
系统F,也叫做多态lambda演算或二阶lambda演算,是有类型lambda演算。它由逻辑学家Jean-Yves Girard和计算机科学家John C. Reynolds独立发现的。系统F形式化了编程语言中的参数多态的概念。 正如同lambda演算有取值于(rang over)函数的变量,和来自它们的粘合子(binder);二阶lambda演算取值自类型,和来自它们的粘合子。 作为一个例子,恒等函数有形如A→ A的任何类型的事实可以在系统F中被形式化为判断 这里的α是类型变量。 在Curry-Howard同构下,系统F对应于二阶逻辑。 系统F,和甚至更加有表达力的lambda演算一起,可被看作Lambda立方体的一部分。.
查看 高阶函数和系统F
组合子逻辑
组合子逻辑是Moses Schönfinkel和哈斯凱爾·加里介入的一种符号系统,用来消除数理逻辑中对变量的需要。它最近在计算机科学中被用做计算的理论模型和设计函数式编程语言的基础。它所基于的组合子是只使用函数应用或早先定义的组合子来定义从它们的参数得出的结果的高阶函数。.
查看 高阶函数和组合子逻辑
Elixir
Elixir是一个基于Erlang虚拟机的函数式、面向并行的通用编程语言。Elixir以Erlang为基础,支持分布式、高容错、实时应用程序的开发,亦可通过宏实现元编程对其进行扩展,并通过协议支持多态。.
查看 高阶函数和Elixir
Erlang
Erlang()是一種通用的----,它由喬·阿姆斯特朗(Joe Armstrong)在瑞典電信設備製造商愛立信所轄的電腦科學研究室開發,目的是創造一種可以應付大規模開發活動的--和執行環境。Erlang於1987年釋出正式版本,最早是愛立信擁有的私有軟體,經過十年的發展,於1998年發表開放源碼版本。 Erlang是運作於虛擬機的--,但是現在也包含有烏普薩拉大學高性能Erlang計劃(HiPE)開發的原生程式碼編譯器,自R11B-4版本開始,Erlang也支持--。在編程範型上,Erlang屬於多重典範程式語言,涵蓋函數式、--及--。循序執行的Erlang是一个及早求值, 單次賦值和--的函數式程式語言。.
查看 高阶函数和Erlang
高阶逻辑
在数学中,高阶逻辑在很多方面有别于一阶逻辑。 其一是变量类型出现在量化中;粗略的说,一阶逻辑中禁止量化谓词。允许这么做的系统请参见二阶逻辑。 高阶逻辑区别于一阶逻辑的其他方式是在构造中允许下层的类型论。高阶谓词是接受其他谓词作为参数的谓词。一般的,阶为n的高阶谓词接受一个或多个(n − 1)阶的谓词作为参数,这里的n > 1。对高阶函数类似的评述也成立。 高阶逻辑更加富有表达力,但是它们的性质,特别是有关模型论的,使它们对很多应用不能表现良好。作为哥德尔的结论,经典高阶逻辑不容许(递归的公理化的)可靠的和完备的证明演算;这个缺陷可以通过使用Henkin模型来修补。 高阶逻辑的一个实例是构造演算。.
查看 高阶函数和高阶逻辑
邱奇数
邱奇编码是把数据和运算符嵌入到lambda演算内的一种方式,最常见的形式是邱奇数,它是使用lambda符号的自然数的表示法。这种方法得名于阿隆佐·邱奇,他首先以这种方法把数据编码到lambda演算中。 在其他符号系统中通常被认定为基本的项(比如整数、布尔值、有序对、列表和tagged unions)都被映射到使用 邱奇编码的高阶函数;根据邱奇-图灵论题我们知道任何可计算的运算符(和它的运算数)都可以用邱奇编码表示。 很多学数学的学生熟悉可计算函数集合的哥德尔编号;邱奇编码是定义在lambda抽象而不是自然数上的等价运算。.
查看 高阶函数和邱奇数
Io (编程语言)
Io语言是一门计算机高级编程语言,其发展历史并不长,2002年3月7日由Steve Dekorte研发出来。 Io语言因为没有关键字,因而很容易进行扩展,并很灵活。.
ISWIM
ISWIM 是 Peter J. Landin 设计并描述于他在1966年于ACM通讯中出版的文章《The Next 700 Programming Languages》中的抽象计算机编程语言(或编程语言家族)。名称是如下首字母缩写“If you See What I Mean”。 尽管没有实现,它被证明为在编程语言特别是函数式编程语言开发中非常有影响力的语言,比如 SASL,Miranda,ML,Haskell 和它们的后继者。 ISWIM 是带有由加了语法糖的 lambda 演算组成的函数式核心的指令式语言,它增加了(i)可变变量和赋值,(ii)强力控制机制 — Landin 的 J 算子,它能够捕获当前的续体(Scheme 的 call/cc 算子是简化版本的 Landin 的 J 算子)。因为基于 lambda 演算,ISWIM 有高阶函数和词法辖域变量。 ISWIM 的操作语义是使用 Landin 的 SECD抽象机定义的,并且使用了传值调用因而是及早求值的。ISWIM 的目标之一就是看起来更像数学表示,所以 Landin 放弃了 ALGOL 的语句间分号和 begin...
查看 高阶函数和ISWIM
Λ演算
λ演算(英語:lambda calculus,λ-calculus)是一套從數學邏輯中發展,以變數綁定和替換的規則,來研究函式如何抽象化定義、函式如何被應用以及遞迴的形式系統。它由數學家阿隆佐·邱奇在20世紀30年代首次發表。Lambda演算作為一種廣泛用途的計算模型,可以清晰地定義什麼是一個可計算函式,而任何可計算函式都能以這種形式表達和求值,它能模擬單一磁帶图灵机的計算過程;儘管如此,Lambda演算強調的是變換規則的運用,而非實現它們的具體機器。 Lambda演算可比擬是最根本的編程語言,它包括了一條變換規則(變數替換)和一條將函式抽象化定義的方式。因此普遍公認是一種更接近軟體而非硬體的方式。對函數式編程語言造成很大影響,比如Lisp、ML语言和Haskell语言。在1936年邱奇利用λ演算給出了對於判定性問題(Entscheidungsproblem)的否定:關於兩個lambda運算式是否等價的命題,無法由一個「通用的演算法」判斷,這是不可判定效能夠證明的頭一個問題,甚至還在停机问题之先。 Lambda演算包括了建構lambda項,和對lambda項執行歸約的操作。在最簡單的lambda演算中,只使用以下的規則來建構lambda項: 產生了諸如:(λx.λy.(λz.(λx.zx)(λy.zy))(x y)的表達式。如果表達式是明確而沒有歧義的,則括號可以省略。對於某些應用,其中可能包括了邏輯和數學的常量以及相關操作。 本文讨论的是邱奇的“无类型lambda演算”,此后,已经研究出来了一些有类型lambda演算。.
查看 高阶函数和Λ演算
SAC编程语言
SAC(Single Assignment C)是一门严格的纯函数式编程语言,以满足数值计算领域的需求为主要目的。怎样实现对多维数组的高效计算是SAC的核心部分。效率在程序设计领域可以有两方面的理解。一方面是提供高级的数组运算操作,以加快开发程序,另一方面是在某种模式下优化编译程序,以减少其所需的运行时间和存储容量。作为一门成功的计算机语言,必须满足第二个条件。 为了能够编译出高效的可执行代码,某些对数值计算不重要的函数式语言的特征(到目前为止)还不被SAC支持,比如高阶函数(higher-order functions),多态(polymorphism),以及惰性求值(lazy evalution)。而像Haskell、Clean、Miranda 或者 ML却拥有这些特征。.
查看 高阶函数和SAC编程语言
Snap!
Snap! 是一款用JavaScript编写的,在浏览器裡运行的图形化编程语言,旨在赋予学生创作交互式故事,动画,游戏等作品,学习数学和计算概念。Snap!由Scratch语言衍生,包含和扩展了Scratch的功能。 Snap! 不用在本地设备上安装任何部件,只需网络浏览器即可。.
查看 高阶函数和Snap!
控制流分析
控制流分析(Control flow analysis)簡稱CFA,是一種確認程式控制流程的靜態代碼分析技術。控制流程會以來表示。對於函數程式語言及物件導向程式設計,CFA都是指計算控制流程的演算法。 控制流分析一詞最早是由Neil D. Jones及Olin Shivers開始使用。 對於像是Scheme之類有高階函數的程式語言,不一定可以會程式中直接看出函數呼叫的目標,例如以下的程式片段 根據上述程式無法確認程序f是指什麼,此情形下的控制流分析需考慮何時會執行此程式碼,及當時的傳入值。 抽象釋義、約束補償及型別系統都可以用來進行控制流分析。.
查看 高阶函数和控制流分析