0

我刚刚开始学习函数式编程(方案)。但我仍然在“功能上”思考问题。

就像是:

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

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

如果我将“if”部分放入另一个函数中,这是否使它具有功能?

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

这就是一切吗?

谢谢!

4

1 回答 1

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

于 2012-03-03T02:38:39.920 回答