我刚刚开始学习函数式编程(方案)。但我仍然在“功能上”思考问题。
就像是:
func1(int a){
if(a==100)
a=0;
return func2(a);
}
那里有一个状态变化,所以这是命令式编程。
如果我将“if”部分放入另一个函数中,这是否使它具有功能?
func1(int a){
return func2(func3(a));
}
这就是一切吗?
谢谢!
我刚刚开始学习函数式编程(方案)。但我仍然在“功能上”思考问题。
就像是:
func1(int a){
if(a==100)
a=0;
return func2(a);
}
那里有一个状态变化,所以这是命令式编程。
如果我将“if”部分放入另一个函数中,这是否使它具有功能?
func1(int a){
return func2(func3(a));
}
这就是一切吗?
谢谢!
并不真地。首先,函数式编程的含义有几种不同的定义,并且会因社区而异。通常情况下,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
参数square
和4
。请注意,这不是twice(square(4))
-square
直到在函数的定义内才评估函数twice
。