标签: currying

如何编写返回另一个函数的函数?

在Python中,我想编写一个make_cylinder_volume(r)返回另一个函数的函数.返回的函数应该可以使用参数调用h,并返回具有高度h和半径的圆柱体积r.

我知道如何从Python中的函数返回,但是如何返回另一个函数

python functional-programming function currying

72
推荐指数
3
解决办法
7万
查看次数

C++中的函数式编程.实施f(a)(b)(c)

我已经开始使用C++进行函数式编程的基础知识.我正在尝试创建一个f(a)(b)(c)将返回的函数a + b + c.我成功实现了f(a)(b)返回a + b 的函数.这是它的代码:

std::function<double(double)> plus2(double a){
    return[a](double b){return a + b; };
}
Run Code Online (Sandbox Code Playgroud)

我只是无法弄清楚如何实现f(a)(b)(c)我之前声明应该返回的功能a + b + c.

c++ functional-programming currying c++11 std-function

63
推荐指数
7
解决办法
9115
查看次数

Haskell函数应用和currying

我总是对学习新语言感兴趣,这一事实让我保持警惕,让我(我相信)成为更好的程序员.我征服Haskell的尝试来了又走 - 到目前为止两次 - 我决定是时候再试一次.第三次是魅力吧?

不.我重新阅读了我的旧笔记......并感到失望:-(

上次让我失去信心的问题很简单:整数的排列.即从整数列表到列表列表 - 列表的排列:

[int] -> [[int]]
Run Code Online (Sandbox Code Playgroud)

这实际上是一个普遍的问题,因此用'a'替换上面的'int'仍然适用.

从我的笔记:

我先自己编码,然后成功.欢呼!

我将我的解决方案发送给我的一位好朋友--Haskell大师,通常有助于向大师学习 - 他告诉我这个,据我所知,"表达了语言的真正力量,使用通用设施来编码你的需要".所有这一切,我最近喝了kool-aid,让我们走吧:

permute :: [a] -> [[a]]
permute = foldr (concatMap.ins) [[]]
   where ins x []     = [[x]]
         ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys]
Run Code Online (Sandbox Code Playgroud)

嗯.让我们打破这个:

bash$ cat b.hs
ins x []     = [[x]]
ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys]

bash$ ghci
Prelude> :load b.hs
[1 of 1] Compiling Main             ( b.hs, interpreted …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming currying

59
推荐指数
3
解决办法
5391
查看次数

Scala中Currying vs Partial Application的实用性(如实际应用)

我试图了解在Scala中讨论部分应用程序的优点.请考虑以下代码:

  def sum(f: Int => Int) = (a: Int, b: Int) => f(a) + f(b)

  def sum2(f: Int => Int, a: Int, b: Int): Int = f(a) + f(b)

  def sum3(f: Int => Int)(a: Int, b: Int): Int = f(a) + f(b)

  val ho = sum({identity})
  val partial = sum2({ identity }, _, _)
  val currying = sum3({ identity })

  val a = currying(2, 2)
  val b = partial(2, 2)
  val c = ho(2, 2)
Run Code Online (Sandbox Code Playgroud)

那么,如果我可以轻松计算部分应用的功能,那么currying的优点是什么?

scala currying partial-application

52
推荐指数
2
解决办法
7030
查看次数

两种在Scala中定义函数的方法.有什么不同?

这是一个Scala会话,它定义并尝试了一些函数:

scala> def test1(str: String) = str + str;    
test1: (str: String)java.lang.String

scala> test1("ab")
res0: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)

很好地工作.

scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       val test2 = test1
                   ^
Run Code Online (Sandbox Code Playgroud)

哎呀.

scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>

scala> test2("ab")
res1: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)

效果很好!

现在,我已经看到_折叠时的语法(_ + …

scala function currying

44
推荐指数
3
解决办法
3万
查看次数

在函数式编程中什么是"currying"?

写作一个未经重构的命令和OO程序员......

最近和Erlang以及Haskell搞砸了.我喜欢Erlang,还不确定Haskell.功能似乎更像数学而不是编程,希望有意义.功能编程似乎非常强大.

阅读关于互动函数编程的文档我经常遇到"currying"这个词.我似乎只找到了一些有点过头的文档 - 很多术语都没有定义.

什么是currying?

我已经找了类似的已经发布的问题,但没有找到任何东西,所以请随意指出我已建立的线程.

functional-programming currying

43
推荐指数
0
解决办法
1万
查看次数

如何在Haskell中定义Lisp的应用?

不应该像Haskell这样的惰性语言允许这个定义,其中函数是curry?

apply f [] = f
apply f (x:xs) = apply (f x) xs
Run Code Online (Sandbox Code Playgroud)

它基本上是一个将给定函数应用于给定参数列表的函数,并且很容易在Lisp中完成.有没有解决方法?

haskell types type-inference currying variadic-functions

39
推荐指数
4
解决办法
2663
查看次数

如何使var a = add(2)(3); // 5工作?

我想使这种语法成为可能:

var a = add(2)(3); //5
Run Code Online (Sandbox Code Playgroud)

根据我在http://dmitry.baranovskiy.com/post/31797647上读到的内容

我不知道如何使它成为可能.

javascript currying

38
推荐指数
8
解决办法
5万
查看次数

如何在C++中完成currying?

什么是currying?

如何在C++中完成currying?

请解释STL容器中的粘合剂?

c++ functional-programming stl binders currying

37
推荐指数
8
解决办法
2万
查看次数

有没有办法在C中做cur?

假设我有一个指向函数的指针_stack_push(stack* stk, void* el).我希望能够调用curry(_stack_push, my_stack)并获取刚刚执行的功能void* el.我想不出办法,因为C不允许运行时函数定义,但我知道有比我更聪明的人:).有任何想法吗?

c functional-programming currying

37
推荐指数
2
解决办法
7837
查看次数