Functional programming 最简单的函数式编程语言是什么?

Functional programming 最简单的函数式编程语言是什么?,functional-programming,Functional Programming,什么是最简单的函数式编程语言?我想最简单的函数式“编程语言”应该是什么。这取决于你所说的最小 首先,函数式语言的前身首先是数学逻辑。某些逻辑的计算应用是在这一事实之后出现的。在某种意义上,许多数学系统(其核心通常非常小)可以称为函数式语言。但我怀疑这就是你想要的 最著名的是的,其中有变体和后代: 最简单的形式是所谓的非类型lambda演算;它只包含lambda抽象,对它们的使用没有限制。仅使用匿名函数创建数据结构是通过所谓的Church编码来完成的,并通过对其进行基本操作来表示数据;数字5变成

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

我想最简单的函数式“编程语言”应该是什么。

这取决于你所说的最小

首先,函数式语言的前身首先是数学逻辑。某些逻辑的计算应用是在这一事实之后出现的。在某种意义上,许多数学系统(其核心通常非常小)可以称为函数式语言。但我怀疑这就是你想要的

最著名的是的,其中有变体和后代:

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

  • Lisp族语言只不过是非类型化的lambda演算,并添加了原子值、cons单元格和其他一些东西。我怀疑Scheme是这里最简单的,好像记忆服务于我一样,它最初是作为一种教学语言创建的

  • lambda演算最初的目的,即描述逻辑证明,在非类型化形式被证明不一致时失败了,这是“让你证明假是真”的礼貌用语。(历史琐事:证明这一点的论文,在当时是一件重要的事情,通过编写一个逻辑证明,在计算方面,它进入了一个无限循环)无论如何,通过引入类型的lambda演算恢复了逻辑的用途。然而,这些通常不会直接作为编程语言使用,特别是因为逻辑健全会使语言不具有图灵完整性

  • 然而,与Lisp如何从非类型化lambda演算派生类似,通过内置递归、代数数据类型和其他一些东西扩展的类型化lambda演算使您获得了扩展的ML语言家族。这些往往是非常小的 本质上,在许多情况下,语法结构直接翻译成lambda术语。除了明显的ML方言外,这还包括Haskell和其他一些语言。然而,我不知道有哪种类型特别简单的函数式语言;这样一种语言很可能会受到可用性差的影响,比极简主义的非类型化语言糟糕得多

因此,就lambda演算变体而言,没有额外特性的纯非类型lambda演算是图灵完备的,并且是尽可能最小的

然而,可以说,更简单的方法是完全消除“变量”的概念——事实上,这最初是为了简化关于逻辑系统的元数学证明,如果内存允许的话——并且只使用称为组合器的高阶函数。我们有:

  • 它本身,最初由发明并由广泛发展。每个组合符都由一个简单的替换规则定义,例如
    Sxyz=xz(yz)
    。在这个定义中,小写字母与变量一样使用,但请记住,组合逻辑本身不使用变量,也不为任何东西指定名称。可以肯定,组合逻辑是最小的,但作为一种编程语言,它并不太友好。最著名的是SK组合基。S的定义如上述示例所示;K是
    Kxy=x
    。仅这两个组合子就足以使它图灵完备!这几乎是令人恐惧的最低限度

  • 是一种基于SK组合子的语言,通过几个具有特殊属性的额外组合子对其进行扩展。少一些,但让你写“你好世界”

  • 不过,即使是两个组合器也超出了您的需要。存在多种单组合基;也许最著名的是物联网组合器,定义为
    ιx=xSK
    ,它被用在极简主义语言中,也被称为

  • 另外值得注意的是,它与Unlambda的区别在于没有引入额外的组合子,没有副作用,并且使用惰性评估。基本上,它是基于组合器的深奥语言世界的哈斯克尔。它既支持SK基站,也支持iota组合器


你觉得哪一种最“最小”可能是一个品味问题。

可以说最最小的函数式语言是,因为它们只使用一个组合符(而unlambda需要两个)。这里有一个简短的解释:

一种深奥的编程语言(又称esolang)是一种旨在测试计算机编程语言设计边界的编程语言,作为概念证明,作为软件艺术,作为另一种语言(特别是函数式编程或过程式编程语言)的黑客接口,或者作为一个笑话。使用深奥的语言将这些语言与工作开发人员用来编写软件的编程语言区别开来。通常,esolang的创建者并不打算将该语言用于主流编程,尽管一些深奥的特性,如视觉空间语法,激发了艺术中的实际应用。这类语言经常受到黑客和爱好者的欢迎。

BrainF*ck是一种简单易用的编程语言。下面是一个简短的概述。

假设你有一个几乎无限的盒子,每个盒子都是空的。幸运的是,你并不孤单!你可以沿着这条线来回移动,把东西放进去,然后拿出来。虽然很基本,但只要有足够的时间,你可以做任何事情:。以下是命令

+ | 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
+|在当前框中添加一个
-|从当前框中选择一个
>|向右移动一个箱子
<|向左移动一个盒子
[]环路
. | 普林