Functional programming Scheme-函数式编程的必要性
我刚刚开始学习函数式编程(Scheme)。 但我在“功能性”思维方面仍然存在问题 比如:Functional programming Scheme-函数式编程的必要性,functional-programming,imperative-programming,Functional Programming,Imperative Programming,我刚刚开始学习函数式编程(Scheme)。 但我在“功能性”思维方面仍然存在问题 比如: 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));
}
这就是一切吗
谢谢 不太可能。首先,函数式编程的含义有几种不同的定义,它随社区而变化。哈斯凯勒的想法通常与阴谋家有点不同 严格地说,函数式编程使用函数作为原语,这样就可以将它们放入变量中并作为参数传递,而不必在过程中对它们进行求值 哈斯凯勒通常会强调纯度要求。功能纯度是指功能不能有副作用(包括状态变化);i、 e.对具有相同参数的函数的每次调用必须返回相同的值
第二个函数在第一个条件(必要条件)下失败。您没有将函数用作一等公民 如果你这样写
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
,它将数字本身相乘。我们定义另一个函数两次
,它接受一个函数和一个参数,并将该函数应用于该参数两次。然后我们给函数两次参数square
和4
。请注意,这不是两次(平方(4))
-函数平方
只有在函数的定义范围内才会计算两次
。首先,函数式编程的含义有几种不同的定义,它随社区而变化。哈斯凯勒的想法通常与阴谋家有点不同
严格地说,函数式编程使用函数作为原语,这样就可以将它们放入变量中并作为参数传递,而不必在过程中对它们进行求值
哈斯凯勒通常会强调纯度要求。功能纯度是指功能不能有副作用(包括状态变化);i、 e.对具有相同参数的函数的每次调用必须返回相同的值
第二个函数在第一个条件(必要条件)下失败。您没有将函数用作一等公民
如果你这样写
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
,它将数字本身相乘。我们定义另一个函数两次
,它接受一个函数和一个参数,并将该函数应用于该参数两次。然后我们给函数两次参数square
和4
。请注意,这不是两次(平方(4))
-函数平方
只有在函数的定义范围内进行了两次
“第二个函数在第一个条件下失败”第一个条件=将函数用作原语?很抱歉,我不明白为什么我的第二个代码不起作用,而你的代码却起作用。我说过我的示例没有什么特别起作用的。但它是纯粹的,因为它不会扰乱国家秩序。这个例子只有一个,如果,那么它没有足够的功能。这有点像给生物学家一些核苷酸,然后问他是一棵树还是一棵灌木。阴谋家避免不必要的副作用(如OP的例子),但我们确实偶尔使用它们。一个人通过经验找到平衡;“再培训”时,最好是走向纯洁。@ryanculpaper:我同意;我的意思是,大多数Haskeller将纯度包含在FP的定义中(Scheme和其他混合体最多只能得到一些“弱函数”标签)。“第二个函数在第一个条件下失败”第一个条件=将函数用作原语?很抱歉,我不明白为什么我的第二个代码不起作用,而你的代码却起作用。我说过我的示例没有什么特别起作用的。但它是纯粹的,因为它不会扰乱国家秩序。这个例子只有一个,如果,那么它没有足够的功能。这有点像给生物学家一些核苷酸,然后问他是一棵树还是一棵灌木。阴谋家避免不必要的副作用(如OP的例子),但我们确实偶尔使用它们。一个人通过经验找到平衡;“再培训”时,最好是走向纯洁。@ryanculpaper:我同意;我的意思是,大多数Haskeller将纯度包含在FP的定义中(Scheme和其他混合型最多只能得到一些“弱功能”标签)。