FP (编程语言)

✍ dations ◷ 2025-10-23 01:59:35 #学术的编程语言,函数式编程语言,函数级语言,1977年建立的编程语言

FP(缩写的Functional Programming),是John Backus创立的支持函数级编程范式的编程语言。它允许消去命名变量。这种语言是在Backus的1977年图灵奖获奖演讲论文《编程可以从冯诺依曼风格中解放出来吗?程序的函数式风格及其代数》中提出的。这篇论文点燃了对函数式语言研究的兴趣,最终导致了现代函数式语言,但不是Backus曾希望的函数级范式。

在他的这篇图灵奖论文中,Backus描述了FP风格与基于lambda演算的语言有着如何不同:

FP系统基于了对叫做泛函形式(functional form)的一组固定的组合形式的利用。它们加上简单的定义,就是从现存函数建造新函数的唯一方式;它们不使用变量或替代(substitution)规则,并且它们成为程序相关的代数的运算操作(operation)。FP系统的所有函数都是一种类型的:它们映射对象到对象之上并总是接受一个单一实际参数(argument)。

FP自身在学术界之外从未被大量使用。在1980年代,Backus创建了后继语言FL,它也保持为研究项目。

FP程序映射所来所至的值(value)构成自一个集合,它在序列成形(sequence formation)下是闭合的:

如果x1,...,xn 是值,则序列〈x1,...,xn〉也是值

这些值可以建造自任何原子(atom)集合:布尔值(boolean)、整数(integer)、实数(real)、字符(character)等:

boolean   : {T, F}integer   : {0,1,2,...,∞}character : {'a','b','c',...}symbol    : {x,y,...}

⊥是未定义(undefined)的值,或者叫底(bottom),序列是“底保持”的(bottom-preserving):

〈x1,...,⊥,...,xn〉  =  ⊥

FP程序是函数f,它们每个都映射一个单一的值x到另一个值:

f:x  表示将函数f应用到值x所得结果的值 

函数要么是原始(primitive)的(就是说由FP环境所提供),要么是通过程序形成运算操作(program-forming operation)建造自原始函数,这种运算操作也叫泛函(functional)。

原始函数的一个例子是constant,它将一个值x变换成一个常量值函数x̄。函数是严格(英语:strict function)的:

f:⊥ = ⊥

原始函数的另一个例子是selector函数家族,指示为1,2,... 这里的:

:〈x1,...,xn〉  =  xi  如果 1 ≤  ≤ n                =  ⊥   其他情况下

泛函

与原始函数相反,泛函(functional)运算操作在其他函数之上。例如,一些函数有单位值,比如加法的0和乘法的1。泛函unit,在应用到有这种值的函数f的时候,产生这样的一个值:

unit +   =  0unit ×   =  1unit foo =  ⊥

下面是FP的核心泛函,复合(composition)、构造(construction)、条件(condition)、应用于所有(apply-to-all),右侧插入(insert-right),左侧插入(insert-left):

composition  f∘g        这里    f∘g:x = f:(g:x)
construction  这里   :x =  〈f1:x,...,fn:x〉
condition (h ⇒ f;g)    这里   (h ⇒ f;g):x   =  f:x   如果   h:x  =  T                                           =  g:x   如果   h:x  =  F                                           =  ⊥     其他情况
apply-to-all  f       这里   f:〈x1,...,xn〉  = 〈f:x1,...,f:xn
insert-right  /f       这里   /f:〈x〉             =  x                       并且   /f:〈x1,x2,...,xn〉  =  f:〈x1,/f:〈x2,...,xn〉〉                       并且   /f:〈 〉             =  unit f
insert-left  \f       这里   \f:〈x〉             =  x                      并且   \f:〈x1,x2,...,xn〉  =  f:〈\f:〈x1,...,xn-1〉,xn〉                      并且   \f:〈 〉             =  unit f

方程函数

除了通过泛函构造自原始函数,函数也是通过方程来递归的定义,最简单的一类方程是:

f ≡ f

这里的 f 是使用泛函从原始函数、其他定义的函数和函数符号自身f建造的表达式。

FP84是扩展FP来包括无限序列,编程者定义的组合形式(英语:combining form)(类似于Backus自己向FP的后继者FL所增加的那样),和惰性求值。不同于Backus自己的另一个FP变体FFP,FP84在对象和函数之间作出明确区分:就是说后者不再由前者的序列来表示。FP84的扩展是通过移除FP对序列构造只能应用于非⊥对象的限制来完成的:在FP84中表达式(包括其含义为⊥)的整个全集在序列构造下是闭合的。

FP84的语义被具体体现在程序的底层代数中,一组函数级方程可以被用于关于程序的操纵和推理。

相关

  • 经济发展经济发展是种随资本主义发展出现的累积过程。其基本要素除了包括经济成长所带来的总量产出与收入结构变化外,经济结构的变迁、人民生活品质提高与福利改善、社会政治体制的变
  • 葡萄糖酸锑钠葡萄糖酸锑钠(Sodium stibogluconate),流通商用药品名有Pentostam等名称,系为治疗利什曼病的药物。这种疾病主要分为皮肤、黏膜及内脏三种,通常基于耐药性的考量,有些药方会并用米
  • abbr title=Glycine receptorGlyR/abbr甘氨酸受体 (英语:glycine receptor,简写GlyR),是氨基酸类神经传导物甘胺酸的受体。GlyR是借由 氯离子流(英语:inhibitory postsynaptic potential)产生作用的离子通道型受体(英语:i
  • 猜纳府猜纳府(泰语:จังหวัดชัยนาท,皇家转写:Changwat Chai Nat,泰语发音:)是泰国中部的一个府。猜纳府的名称之泰文意为“胜利府”,它是素可泰王国时代的前哨城府,因为每次与
  • 罗克堡罗克堡(英语:Castle Rock),是美国科罗拉多州道格拉斯县下属的一座城镇,也是道格拉斯县的县治。建于1881年5月17日,面积大约为33.789平方英里(87.512平方公里)。根据2010年美国人口普
  • 异特龙属可疑物种异特龙属(属名:)又称异龙或跃龙,是兽脚亚目肉食龙下目恐龙的一属。异特龙是种大型的二足、掠食性恐龙,平均身长为8.5米,最长可达12到13米。它们生存于晚侏罗纪的启莫里阶
  • M2M (组合)窈窕美眉(英语:M2M)是由来自挪威的玛丽特·拉森(中文译为:乖乖美眉、玛丽美眉、玛莉特)及玛丽安·雷文(中文译为:好动美眉、落比美眉、玛莉安)组成的双人女子团体。因两人名字开头均
  • 奥林匹克先生奥林匹克先生(英语:Mr. Olympia),是健美界的头衔,授予国际健美总会每年举办的奥林匹克先生大赛冠军。首届赛事于1965年9月18日在纽约布鲁克林音乐学院(英语:Brooklyn Academy of Mu
  • 莉莉亚与特雷兹第一本小说:《莉莉亚与特雷兹Ⅰ—于是两人踏上旅途<上>》《莉莉亚与特雷兹》(日语:リリアとトレイズ)是轻小说作家时雨泽惠一跟插画家黑星红白继《奇诺之旅》、《艾莉森》后另一
  • 猪鼻龟猪鼻龟(学名:),亦称飞河龟及大洋洲猪鼻龟,是两爪鳖科两爪鳖属的唯一一种。猪鼻龟是唯一完全水栖的淡水龟类,由陆生动物退化为水生动物。2004年,猪鼻龟首次登上世界自然基金会公布十