首先,让我告诉你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()隐藏此)不确定如何正确地表达问题,在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) 我一直试图理解这段代码,但我无法清楚地把它包起来:
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]产生上述类型的签名?
我是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) 我正在学习javascript.我遇到了这个问题并尝试使用javacript中的currying来解决它但是无法正确解决它.
给定一个函数pipe(),它将几个函数作为参数并返回一个将其参数传递给第一个函数的新函数,然后将结果传递给第二个函数,然后传递给第三个函数,依此类推,返回最后一个函数的输出.所以给出:pipe(foo, bar, baz)(1, 2, 3)例如,相当于baz(bar(foo(1,2,3))).
我将如何在javascript中解决这个问题?
有没有办法在写一个curry函数时保持某种内部状态?
例如,假设我想编写一个curried函数,该函数考虑了之前调用函数的次数.
即addProgressively(3)(4)(5)= 1*3 + 2*4 + 3*5 = 26.
我的方法是添加一些计数器,每次返回一个新的curried函数时递增,但我找不到在addProgressively函数中跟踪该参数的好方法.
以下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框架调用此函数,这使得它比它需要的更复杂.有没有办法编译到未计算的函数?
经过多年的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,并且遇到了这个问题。我正在创建一个名为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) 我试图了解如何将案例类作为参数传递给接受函数作为参数的函数。下面是一个示例:
考虑以下功能
def !: 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更新!以上以及In和Out定义:
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)