标签: currying

将函数映射到numpy数组,改变参数

首先,让我告诉你codez:

a = array([...])
for n in range(10000):
    func_curry = functools.partial(func, y=n)
    result = array(map(func_curry, a))
    do_something_else(result)
    ...
Run Code Online (Sandbox Code Playgroud)

我在这里做的是尝试应用于func数组,每次更改func第二个参数的值.这是SLOOOOW(每次迭代创建一个新函数肯定没有帮助),我也觉得我错过了这样做的pythonic方式.有什么建议吗?

能给我2D阵列的解决方案是个好主意吗?我不知道,但也许是.

可能的问题的答案:

  • 是的,这是(使用广义定义),优化问题(do_something_else()隐藏此)
  • 不,scipy.optimize没有用,因为我正在处理布尔值,它似乎永远不会收敛.

python arrays numpy map currying

2
推荐指数
1
解决办法
2843
查看次数

Scala by Example - currying的问题

不确定如何正确地表达问题,在Scala by Example book(第69页)的合并排序示例中存在问题.该函数定义如下:

def msort[A](less: (A, A) => Boolean)(xs: List[A]): List[A] = {
  def merge(xs1: List[A], xs2: List[A]): List[A] =
    if (xs1.isEmpty) xs2
    else if (xs2.isEmpty) xs1
    else if (less(xs1.head, xs2.head)) xs1.head :: merge(xs1.tail, xs2)
    else xs2.head :: merge(xs1, xs2.tail)
  val n = xs.length/2
  if (n == 0) xs
  else merge(msort(less)(xs take n), msort(less)(xs drop n))
}
Run Code Online (Sandbox Code Playgroud)

然后有一个例子说明如何通过currying从中创建其他函数:

val intSort = msort((x : Int, y : Int) => x < y)
val reverseSort = msort((x:Int, y:Int) => x > …
Run Code Online (Sandbox Code Playgroud)

scala currying

2
推荐指数
1
解决办法
399
查看次数

zip的解释($)

我一直试图理解这段代码,但我无法清楚地把它包起来:

ghci > :t zipWith
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
ghci > :t ($)
($) :: (a -> b) -> a -> b
ghci > let c = zipWith ($)
ghci > :t c
c :: [b -> c] -> [b] -> [c]
Run Code Online (Sandbox Code Playgroud)

如何[b -> c]产生上述类型的签名?

haskell currying

2
推荐指数
1
解决办法
204
查看次数

Scala课程"Currying"

我是Scala的新手,我遇到了currying的问题,无法理解下面代码的答案是144.希望你们能在这里帮助我.

谢谢

def product (f: Int => Int)(a: Int, b: Int) : Int =
   if(a>b) 1
   else f(a) * product(f)(a + 1, b)

product(x => x * x)(3, 4) //answer = 144
Run Code Online (Sandbox Code Playgroud)

scala currying

2
推荐指数
1
解决办法
221
查看次数

给定一个函数管道(foo,bar,baz)(1,2,3),你如何在javascript中实现它等同于baz(bar(foo(1,2,3))

我正在学习javascript.我遇到了这个问题并尝试使用javacript中的currying来解决它但是无法正确解决它.

给定一个函数pipe(),它将几个函数作为参数并返回一个将其参数传递给第一个函数的新函数,然后将结果传递给第二个函数,然后传递给第三个函数,依此类推,返回最后一个函数的输出.所以给出:pipe(foo, bar, baz)(1, 2, 3)例如,相当于baz(bar(foo(1,2,3))).

我将如何在javascript中解决这个问题?

javascript functional-programming currying

2
推荐指数
1
解决办法
766
查看次数

保持状态在咖喱功能

有没有办法在写一个curry函数时保持某种内部状态?

例如,假设我想编写一个curried函数,该函数考虑了之前调用函数的次数.

即addProgressively(3)(4)(5)= 1*3 + 2*4 + 3*5 = 26.

我的方法是添加一些计数器,每次返回一个新的curried函数时递增,但我找不到在addProgressively函数中跟踪该参数的好方法.

javascript currying

2
推荐指数
1
解决办法
82
查看次数

将PureScript函数编译为未经验证的JavaScript函数

以下PureScript函数:

add :: Number -> Number -> Number
add a b = a + b 
Run Code Online (Sandbox Code Playgroud)

...编译成JavaScript如下:

var add = function (a) {
    return function (b) {
        return a + b;
    };
};
Run Code Online (Sandbox Code Playgroud)

我想在iOS上使用JavaScriptCore框架调用此函数,这使得它比它需要的更复杂.有没有办法编译到未计算的函数?

javascript currying purescript

2
推荐指数
1
解决办法
110
查看次数

增加值的函数如何工作?

经过多年的OOP,我正在努力学习haskell.我正在读Happy Haskell.它提供了以下代码:

plus :: Int -> Int -> Int
plus x y = x + y

plus' :: Int -> Int -> Int
plus' = \x -> \y -> x + y

increment :: Int -> Int
increment = plus 1

increment' :: Int -> Int
increment' = (\x -> \y -> x + y) 1
Run Code Online (Sandbox Code Playgroud)

我理解加号和加号是如何工作的(它们是相同的,不同的语法).但增量,我不明白.

increment :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

意味着它需要一个int,并返回一个int,对吗?但就在那之后,实际的功能是:

increment = plus 1
Run Code Online (Sandbox Code Playgroud)

题:

整数值增量在哪里?标志x右边是否应该有一个或=哪些东西表示该函数作为输入的整数值?就像是:

increment _ = plus 1 x
Run Code Online (Sandbox Code Playgroud)

编辑:另外,不应该是增量的定义, …

haskell types function currying partial-application

2
推荐指数
1
解决办法
117
查看次数

进入范围而不必在Haskell中递归

我正在学习Haskell,并且遇到了这个问题。我正在创建一个名为getInRange的函数,该函数需要两个int和一个列表作为参数v1,v2和iL。基本上,我想遍历列表iL,并获取介于v1和v2之间的数字。我试图使用高阶函数来解决此问题,所以没有递归。我也是curying的新手,并尝试在我的解决方案中尝试使用它。我有一个辅助函数'check',它将检查给定的值x是否在v1和v2的范围内。我尝试运行我的代码,但最终得到error: parse error on input 'getInRange' 以下代码:

check v1 v2 z  = if (z > v1 && z < v2) then z

--getInRange
getInRange :: Ord a => a -> a-> [a] -> [a]
getInRange v1 v2 (x:xs) = foldr (check v1 v2) [] (x:xs)
Run Code Online (Sandbox Code Playgroud)

作为示例输入和输出,

getInrange 3 5 [1,2,3,4,5,6,7] 
= [4]
Run Code Online (Sandbox Code Playgroud)

haskell currying

2
推荐指数
1
解决办法
80
查看次数

Scala如何将案例类转换为函数?

我试图了解如何将案例类作为参数传递给接受函数作为参数的函数。下面是一个示例:

考虑以下功能

def !![B](h: Out[B] => A): In[B] = { ... }
Run Code Online (Sandbox Code Playgroud)

如果我正确理解,这是一种多态方法,它具有类型参数,B并且接受函数h作为参数。Out并且In被其他两个类前所定义。

然后,如下所示使用此功能:

case class Q(p: boolean)(val cont: Out[R])
case class R(p: Int)

def g(c: Out[Q]) = {
  val rin = c !! Q(true)_
  ...
}
Run Code Online (Sandbox Code Playgroud)

我知道使用currying是为了避免编写类型注释,而只是编写_。但是,我无法理解为什么以及如何将案例类Q转换为type的函数(h)Out[B] => A

编辑1更新!以上以及InOut定义:

abstract class In[+A] {
  def future: Future[A]
  def receive(implicit d: Duration): A = {
    Await.result[A](future, d)
  }
  def ?[B](f: A …
Run Code Online (Sandbox Code Playgroud)

scala function currying

2
推荐指数
1
解决办法
94
查看次数