Functional programming 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)); } 这就是一切吗 谢谢 不太可能。首先,函数式编程的含义有几种不同的定义,它随社区而变化。哈斯凯勒的想法通

我刚刚开始学习函数式编程(Scheme)。 但我在“功能性”思维方面仍然存在问题

比如:

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和其他混合型最多只能得到一些“弱功能”标签)。