首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案-函数式编程的命令式

方案-函数式编程的命令式
EN

Stack Overflow用户
提问于 2012-03-03 10:31:27
回答 1查看 577关注 0票数 0

我刚刚开始学习函数式编程(Scheme)。但是我仍然有“功能性”思考的问题。

类似于:

代码语言:javascript
复制
func1(int a){
   if(a==100)
      a=0;
   return func2(a);
}

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

如果我把" If“部分放到另一个函数中,这会使它变得有趣吗?

代码语言:javascript
复制
func1(int a){
   return func2(func3(a));
}

这就是所有的一切吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-03 10:38:40

不怎么有意思。首先,对函数式编程的含义有几种不同的定义,而且它随社区的不同而不同。通常情况下,Haskellers对此的看法与阴谋者略有不同。

严格地说,函数式编程使用函数作为原语,因此可以将它们放入变量中并作为参数传递,而不会在过程中计算它们。

Haskellers通常会在纯度要求上进行调整。函数纯洁性是指函数不能有副作用(包括状态的变化);即每次调用具有相同参数的函数时都必须返回相同的值。

您的第二个函数在第一个条件下失败,这是必要的条件。你没有以一等公民的身份使用函数。

如果你这样写,

代码语言:javascript
复制
func1(int a) {
  return (
    if (a==100)
      then func(0);
      else func2(a);
    )
}

这现在是纯粹的,但它既不是特别有效,也不是特别迫切。

我真的不能把你的例子翻译成特定的功能,因为上下文太少了。函数代码通常的"hello world“是这样的:

代码语言:javascript
复制
square(x) = x * x
twice(f, x) = f(f(x))
twice(square, 4)
  => 256

在这里,我们定义了一个函数square,它将数字乘以自身。我们定义另一个函数twice,该函数接受一个函数和一个参数,并将该函数应用于该参数两次。然后,我们为函数twice提供参数square4。请注意,这不是twice(square(4)) -只有在函数twice的定义中才会对函数square求值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9542863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档