2016-03-03 70 views

回答

2

什么是语言应具有的特质被认定为功能性的语言吗?当我们可以说一种语言XYZ支持功能范式?

这是两个不同的问题。我会说,“支持功能范式”是指:

  • 你可以用函数的工作就像与其他类型(在局部变量,参数使用它们,...)
  • 可以定义匿名函数(又名lambda函数)在线
  • 匿名函数可以访问他们的环境声明的变量(这被称为闭包)

根据这个定义,几乎任何现代主流编程语言支持功能模式(以C除外)。

要被归类为“功能语言”,语言需要关注功能范式作为其主要范式或唯一范例,包括不变性和专注于纯粹(无副作用)功能。除了以上,这通常意味着:

宣告不变类型,如识别联合模式匹配
  • 函数体
  • 支持
    • 支持由表情,不发言
  • +0

    这里的匿名函数的意义是什么? – vivek

    +0

    @vivek我不太明白你在问什么。你是否问为什么这些函数必须是匿名的,当你可以命名闭包? – svick

    +0

    你的解释是相当不错的,但是假设我不知道闭包,那么匿名函数如何帮助语言支持函数式编程。 – vivek

    1

    一种具有一流功能的语言将允许您使用功能范例编写程序。

    成为一流的功能意味着什么?

    1. 它们可以被分配到变量

      let f = x => x + 5; 
      f(3); // 8 
      
    2. 它们可以作为参数传递给其他函数

      let xs = [1,2,3]; 
      let f = x => x * 2; 
      xs.map(f); // [2,4,6]; 
      
    3. 他们可以是一个函数的返回值

      let add = function(x) { 
          return y => x + y; 
      }; 
      add(1)(2); // 3 
      
    4. 它们可以被包含在数据结构

      let pikachu = { 
          number: 25, 
          shock: enemy => enemy.damage(30), 
          growl: enemy => enemy.sadden(40) 
      }; 
      pikachu.growl(meowth); // "It's very effective!" 
      
    +1

    我不t认为这就足够了,通过这个定义,C是一个函数式语言,因为它有函数指针。 – svick