"功能编程"有明确的含义,但是"功能语言"呢?

dub*_*jim 29 scheme functional-programming

我非常清楚功能和命令式编程技术之间的区别.但是人们普遍倾向于谈论"功能语言",这真让我感到困惑.

当然,像Haskell这样的语言比C等其他语言对函数式编程更友好.但即便是前者也会进行I/O(它只是将它保存在贫民区).你可以用C编写功能程序(这简直太荒谬了).所以也许这只是程度问题.

尽管如此,即使是程度问题,当有人称Scheme为"功能语言"时,它意味着什么?我看到的大多数Scheme代码都是必不可少的.如果你愿意的话,只是Scheme可以很容易地用函数式编写吗?Lua和Python也是如此.它们也是"功能语言"吗?

我(真的)不想成为一名语言警察.如果这只是一种松散的谈话方式,那很好.我只想弄清楚它是否确实有一些确定的意义(即使这是一个程度问题),我没有看到.

Nor*_*sey 16

在以编程语言为生的人中,"函数式编程语言"是一个相当弱的术语.有一个强烈的共识:

  • 任何调用自身功能的语言都必​​须支持具有词法作用域规则的一流嵌套函数.

少数人还为以下语言保留"功能语言"一词:

就像在Agda,Clean,Coq和Haskell这样的语言中.

除此之外,被认为是函数式编程语言通常是一个意图问题,也就是说,设计师是否希望将其称为"功能性".

Perl和Smalltalk是支持一流功能但其设计者不会将其称为功能的语言示例.目标Caml是一种被称为功能的语言示例,即使它具有带继承和所有内容的完整对象系统.

被称为"功能"的语言往往具有如下特征(取自函数式编程的定义点):

特定编程语言具有越多的语法和构造以使得上面列出的各种编程特征容易/无痛地表达和实现,越有可能将某人称为"功能语言".


Ran*_*pho 12

我会说功能语言是任何允许函数式编程而没有过度痛苦的语言.


Bri*_*ian 9

我喜欢@Randolpho的回答.关于功能,我可以在这里引用列表:

定义函数式编程点

亦即

  • 纯度(又称不变性,避免副作用,参考透明度)
  • 高阶函数(例如,将函数作为参数传递,将其作为结果返回,将动态定义为匿名函数作为lambda表达式)
  • 懒惰(又名非严格评估,与纯度相结合时最有用/最实用)
  • 代数数据类型模式匹配
  • 关闭
  • 卷曲/部分应用
  • 参数多态(又名泛型)
  • 递归(由于纯度而更突出)
  • 用表达式而不是语句编程(再次,从纯度)

特定的编程语言具有更多的语法和结构,使得上面列出的各种FP功能易于/轻松地表达和实现,更有可能有人将其标记为"功能语言".