根据评论和接近投票标记,我发现我没有清楚地表达我想问的问题。因此,让我尽可能简洁明了地表述它。
编写非默认功能代码是什么意思?
回答该问题的任何答案都是有效的。下面的所有内容只是额外的上下文,解释我为什么要问这个问题并试图展示我的知识差距,但如果它只是令人困惑,请忽略它。
如果要我定义函数式编程,我会将其描述为将问题分解为可重用的小函数,然后将这些函数组合在一起(使用管道、组合运算符、部分应用程序等)来构建程序的艺术。如果您可以将程序的各个部分组成为管道中的一系列纯步骤,那么您正在进行函数式编程。像函数纯粹性和一等函数这样的东西与范式相关,并且已经成为非常流行的概念,但我不认为它们是范式的核心。
我喜欢这个定义,因为它实际上感觉就像我在描述一种范式 - 一种解决问题的方法,而不是简单地将函数式编程定义为“编写纯函数” - 函数纯度只是一种技术,而不是一个完整的范式。资源像维基百科似乎同意我在这里的一般结论,它将函数式程序描述为“通过应用和组合函数构建的程序”。
如果我要定义无点编程(隐性编程),我会以类似的方式定义它 - 这是通过部分应用程序或函数组合来构建函数的技术,而不是通过显式命名来手动显式定义函数它需要的所有参数等
我意识到我对无点编程的定义在很大程度上与我对函数式编程的定义重叠——有点像同一枚硬币的两面。通过函数式编程,我们将问题分解为多个部分,然后通过使用无点编程将这些部分组合在一起。然而,我知道这两个术语并不意味着可以互换,而且我在网上看到很多地方都说可以在不遵循无点风格的情况下进行函数式编程。
这引出了我的问题:如何编写非无点的功能代码?这将是什么一个例子(用你想要的任何多范式语言编写 - 我特别要求一种多范式语言,这样我就可以想象如果不是以函数式风格编写的类似示例会是什么样子根本)?我假设我的定义是错误的——它们怎么错了?更好的定义是什么?
函数式编程是使用函数进行编程,而无点编程是使用组合器进行编程。所有组合器都是函数,但并非所有函数都是组合器。
为了有效地使用组合器进行编程,首先需要相当丰富的预定义(原始)组合器。如果您使用 minimal 集来代替...那么,尝试在 SKI 中编写一些不平凡的东西,看看效果如何。
因此,虽然我对计算理论和其他精彩数学分支的重要工具一无所知,但无点(又名组合)编程很少以其纯粹的形式在实践中使用。如果您需要一个不在预定义集合中的组合器,或者无法使用先前定义的组合器轻松表达,您只需将一个组合器定义为普通的旧函数并继续。