javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

函数式编程-什么是“固化”?

我在几篇文章和博客中都看到过关于咖喱函数的引用,但是我找不到很好的解释(或者至少有一个合理的解释!)

trans by 2020-08-09T14:28:54Z

在Scala中定义函数的两种方式。 有什么区别?

这是一个小的Scala会话,它定义并试用了一些功能:

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

scala> test1("ab")
res0: java.lang.String = abab

效果很好。

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
                   ^

哎呀

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

scala> test2("ab")
res1: java.lang.String = abab

效果很好!

现在,我已经看到了折叠时的_语法(def等)。 因此,据我了解,val基本上意味着“争论”。 所以test1 _基本上是指带有参数的函数,该函数被赋予test1。但是,为什么这与test1并不完全相同?为什么附加_会有区别呢?

所以我一直在探索...

scala> val test3 = (str: String) => str + str
test3: (String) => java.lang.String = <function1>

scala> test3("ab")
res2: java.lang.String = abab

scala> val test4 = test3
test4: (String) => java.lang.String = <function1>

在这里,它可以在没有_的情况下工作! defed函数和valed函数之间有什么区别?

trans by 2020-07-19T09:30:16Z

Currying v.s.的实用性(在实际应用中) 部分应用在

我试图了解在Scala中使用curring优于部分应用程序的优势。 请考虑以下代码:

  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)

因此,如果我能这么容易地计算出部分应用函数,那么curring的优点是什么?

trans by 2020-01-14T20:42:58Z

haskell - 使用currying参数的排序

我有两次最近重构的代码,以便更改参数的顺序,因为有太多的代码,如flip\x -> foo bar x 42正在发生黑客攻击。

在设计功能签名时,哪些原则可以帮助我充分利用currying?

trans by 2019-09-04T04:01:48Z

在Java 8中,带有2个箭头的lambda是什么意思?

我以前读了几篇Java 8教程。

现在我遇到了以下主题:java支持Currying吗?

在这里,我看到以下代码:

IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b;
System.out.println(curriedAdd.apply(1).applyAsInt(12));

我明白这个例子总结了2个元素,但我无法理解构造:

a -> b -> a + b;

根据表达式的左侧部分,该行应实现以下功能:

R apply(int value); 

在此之前,我只用一支箭只遇到了lambdas。

trans by 2019-07-03T19:40:41Z

currying - Scala中每个列表的多个参数列表和多个参数之间有什么区别?

在Scala中,可以像这样编写(curried?)函数

def curriedFunc(arg1: Int) (arg2: String) = { ... }

以上curriedFunc函数定义与两个参数列表和单个参数列表中具有多个参数的函数之间有何区别:

def curriedFunc(arg1: Int, arg2: String) = { ... }

从数学的角度来看,这是(curriedFunc(x))(y)curriedFunc(x,y),但我可以写def sum(x) (y) = x + y,同样将是def sum2(x, y) = x + y

我只知道一个区别 - 这是部分应用的功能。 但这两种方式对我来说都是等同的。

还有其他差异吗?

trans by 2019-04-23T02:42:10Z

currying - 为什么Scala每个列表都提供多个参数列表和多个参数?

这个问题在这里已有答案:

  • Scala中每个列表的多个参数列表和多个参数之间有什么区别?                                     4个答案

多个参数列表,例如 def foo(a:Int)(b:Int) = {}和每个列表的多个参数,例如 def foo(a:Int, b:Int) = {}在语义上是等价的,据我所知,大多数函数式语言只有一种方法来声明多个参数,例如: F#。

我可以找到支持这两种函数定义样式的唯一原因是允许使用只有一个参数的参数列表进行类似语法的语言扩展。

def withBufferedWriter(file: File)(block: BufferedWriter => Unit)

现在可以使用syntax-looking调用

withBufferedWriter(new File("myfile.txt")) { out =>
  out write "whatever"
  ...
}

但是,如果没有多个参数列表,可能还有其他方法可以支持花括号的使用。

一个相关的问题:为什么在Scala中使用多个参数列表称为“currying”? Currying通常被定义为为了支持部分应用而使n-ary函数一元化的技术。 但是,在Scala中,可以部分应用函数,而不会使函数的“curried”(多个参数列表,每个参数列表)。

trans by 2019-04-18T04:21:53Z

功能 - JavaScript咖喱:有哪些实际应用?

我不认为我已经讨好了。 我理解它的作用,以及如何做到这一点。 我想不出我会用它的情况。

你在JavaScript中使用currying(或者使用它的主要库在哪里)? 欢迎DOM操作或一般应用程序开发示例。

其中一个答案提到了动画。 像slideUp,fadeIn这样的函数将一个元素作为参数,并且通常是一个curried函数,返回高阶函数,内置默认的“动画函数”。 为什么这比仅使用某些默认值更高的函数更好?

使用它有什么缺点吗?

根据要求,这里有一些关于JavaScript currying的好资源:

  • [http://www.dustindiaz.com/javascript-curry/]
  • Crockford,Douglas(2008)JavaScript:The Good Parts
  • [http://www.svendtofte.com/code/curried_javascript/](绕道进入ML所以跳过“ML中的速成课程”中的整个部分,然后再从“如何编写咖喱JavaScript”开始)
  • [http://web.archive.org/web/20111217011630/http://blog.morrisjohns.com:80/javascript_closures_for_dummies]
  • JavaScript闭包如何工作?
  • [http://ejohn.org/blog/partial-functions-in-javascript](Resig先生按照惯例收钱)
  • [http://benalman.com/news/2010/09/partial-application-in-javascript/]

我会在评论中添加更多内容。


因此,根据答案,currying和部分应用一般是便利技术。

如果您经常通过使用相同配置调用高级函数来“精炼”高级函数,则可以使用更高级别的函数来设置(或使用Resig的部分)来创建简单,简洁的帮助器方法。

trans by 2019-04-15T03:29:17Z

函数式编程 - Java是否支持Currying?

我想知道是否有任何方法可以在Java中提取它。 我认为没有原生支持闭包是不可能的。

trans by 2019-04-11T02:26:06Z

函数式编程 - 什么是'Currying'?

我在几篇文章和博客中看到了对curried函数的引用,但我找不到一个好的解释(或者至少有一个有意义的解释!)

trans by 2019-01-23T16:52:57Z

语言不可知 - currying和部分应用程序有什么区别?

我经常在互联网上看到各种各样的抱怨,其他人的currying示例并不是currying,但实际上只是部分应用。

我没有找到关于部分应用是什么的正确解释,或者它与currying有何不同。 似乎存在普遍的混淆,其中相同的例子在某些地方被描述为currying,而在其他地方则被部分应用。

有人可以向我提供这两个术语的定义,以及它们之间的区别细节吗?

trans by 2019-01-11T15:27:04Z

1 共1页