方案 - 功能编程势在必行

时间:2012-03-03 02:31:27

标签: functional-programming imperative-programming

我刚开始学习功能编程(Scheme)。 但是我仍然在思考"功能性"。

类似的东西:

func1(int a){
   if(a==100)
      a=0;
   return func2(a);
}

那里有一个状态变化,所以这就是命令式编程。

如果我采取"如果" part并把它扔进另一个函数,这会使它成为函数吗?

func1(int a){
   return func2(func3(a));
}

这就是所有人的意思吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

不是真的。首先,对函数式编程的含义有几种不同的定义,它由社区改变。 Haskellers通常对Schemers有不同的看法。

严格来说,函数式编程使用函数作为基元,因此可以将它们放入变量中并作为参数传递,而不会在过程中对它们进行求值。

Haskellers通常会满足纯度要求。功能纯度是指功能必须没有副作用(包括改变状态)的想法;即每次调用具有相同参数的函数都必须返回相同的值。

你的第二个功能在第一个条件下失败,必要的条件。您没有将职能用作一等公民。

如果你这样写,

func1(int a) {
  return (
    if (a==100)
      then func(0);
      else func2(a);
    )
}

现在这是纯粹的,但它既不是特别功能也不是特别重要。

我无法将您的示例真正转换为具体功能的内容,因为上下文太少。功能代码通常的“hello world”是这样的:

square(x) = x * x
twice(f, x) = f(f(x))
twice(square, 4)
  => 256

这里我们定义一个函数square,它将数字乘以它自己。我们定义另一个函数twice,它接受​​一个函数和一个参数,并将该函数应用于参数两次。然后我们为函数twice提供参数square4。请注意,这不是twice(square(4)) - 函数square直到函数twice的定义中才会被评估。