我刚开始学习功能编程(Scheme)。 但是我仍然在思考"功能性"。
类似的东西:
func1(int a){
if(a==100)
a=0;
return func2(a);
}
那里有一个状态变化,所以这就是命令式编程。
如果我采取"如果" part并把它扔进另一个函数,这会使它成为函数吗?
func1(int a){
return func2(func3(a));
}
这就是所有人的意思吗?
谢谢!
答案 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
提供参数square
和4
。请注意,这不是twice(square(4))
- 函数square
直到函数twice
的定义中才会被评估。