什么是最小的函数式编程语言?

时间:2010-12-06 13:29:15

标签: functional-programming

什么是最小的函数式编程语言?

4 个答案:

答案 0 :(得分:60)

这取决于你的意思是最小的。

首先,函数式语言的祖先首先是数学逻辑。某些逻辑的计算使用是在事后发生的。从某种意义上说,许多数学系统(其核心通常非常小)可以称为函数式语言。但我怀疑这就是你所追求的!

最为人所知的是Alonzo Churchlambda calculus,其中有变体和后代:

  • 最简单的形式是所谓的无类型lambda演算;这里只包含lambda抽象,对它们的使用没有任何限制。仅使用匿名函数创建数据结构是通过所谓的 Church编码完成的,并通过基本操作表示数据;数字5变成“重复5次”,依此类推。

  • Lisp族语言只不过是无类型的lambda演算,增加了原子值,cons细胞和其他一些东西。我怀疑Scheme在这里是最极简的,好像记忆为我服务它首先是作为教学语言创建的。

  • lambda演算的原始目的,即描述逻辑证明的原始目的,当无类型表格被证明是不一致时失败,这是“让你证明虚假是真的”的礼貌用语。 (历史琐事:证明这一点的论文,当时这是一个重要的事情,通过编写一个逻辑证明,在计算方面,进入一个无限循环。)无论如何,用作通过引入类型的lambda演算来恢复逻辑。然而,这些并不直接用作编程语言,特别是因为逻辑上的声音使语言不是图灵完整的。

  • 然而,类似于Lisps如何从无类型的lambda演算中派生出来,使用内置递归,代数数据类型和其他一些东西扩展的类型化lambda演算可以获得扩展的ML系列语言。这些往往很小 在许多情况下,语法结构具有直接翻译为lambda术语。除了明显的ML方言,这还包括Haskell和一些其他语言。但是,我不知道任何特别简约的类型化函数语言;这种语言的可用性很可能比极简主义的无类型语言差得多。

因此,就lambda演算变量而言,纯粹的无类型lambda演算没有额外的特征是Turing-complete,并且尽可能小![/ p>

然而,可以说更小的是完全消除“变量”的概念 - 事实上,这最初是为了简化逻辑系统的元数学证明,如果内存为我服务 - 并且只使用高阶函数称为组合器。我们在这里:

  • Combinatory logic本身,最初由Moses Schönfinkel发明并由Haskell Curry广泛开发。每个组合子由简单的替换规则定义,例如Sxyz = xz(yz)。小写字母与此定义中的变量一样使用,但请记住,组合逻辑本身不使用变量,或根本不为任何名称指定名称。可以肯定的是,组合逻辑很小,但不像编程语言那么友好。最着名的是 SK 组合基地。 S的定义如上例所示; K是Kxy = x。仅这两个组合器足以让图灵完成!这几乎是极其微小的。

  • Unlambda是一种基于SK组合器的语言,通过一些具有特殊属性的额外组合器扩展它。不那么简单,但让你写“Hello World”。

  • 尽管如此,即使是两个组合器也不仅仅是你需要的。存在各种单组合基础;也许最着名的是 iota Combinator ,定义为ιx = xSK,用于极简主义语言Iota

  • 还有一些注意事项是Lazy K,它与Unlambda的区别在于没有引入额外的组合子,没有副作用,并且使用延迟评估。基本上,它是基于组合器的深奥语言世界的Haskell。它既支持SK基础,也支持iota组合。

其中哪些最让你觉得“最小”可能是一种品味问题。

答案 1 :(得分:7)

可以说最简单的函数式语言是iota and Jot,因为它们只使用一个组合子(而unlambda需要两个)。这是一个简短的解释:http://web.archive.org/web/20061105204247/http://ling.ucsd.edu/~barker/Iota/

答案 2 :(得分:4)

我认为最简单的功能性“编程语言”是lambda calculus

答案 3 :(得分:1)

BrainF * ck是一种简单易用的编程语言。这是一个快速的概述。

想象一下,你有一个近乎无限范围的盒子,每个盒子都是空的。幸运的是,你并不孤单!您可以沿着线前后移动,将物品放入其中,然后取出它们。虽然很基本,但有足够的时间可以做任何事情:http://www.iwriteiam.nl/Ha_bf_inter.html。这是命令。

+ | add one to currrent box
- | take one from current box
> | move one box to the right
< | move one box to the left
[] | loop
. | print current value
, | input current value

要查看的其他内容:

P“|简化BF

语言f |更新的简化BF

http://www2.gvsu.edu/miljours/bf.html |很酷的BF东西/介绍

https://www.esolangs.org/wiki/Language_list |类似langs / variants的列表