只是想知道有没有办法在功能样式中实现heapify操作?
假设数据类型是:
type 'a heap = Empty | Node of 'a * 'a heap * 'a heap
Run Code Online (Sandbox Code Playgroud) 有我的问题:
假设我们有3个函数:f,g,h和以下代码
y = f(x)
a = g(y)
b = h(y)
Run Code Online (Sandbox Code Playgroud)
我想在一行上完成这项工作,例如:
a,b = g(f(x)),h(f(x))
Run Code Online (Sandbox Code Playgroud)
但如果f非常慢(并且没有缓存它的结果),这效率不高
我有一个带发电机的解决方案:
a,b = ((g(y),h(y)) for y in (f(x),)).next()
Run Code Online (Sandbox Code Playgroud)
但这不是很可读
我想做一些这样的事情:
with f(x) as y: a,b = g(y),h(y)
Run Code Online (Sandbox Code Playgroud)
有没有人有想法?
(这是骗子
y = f(x);a = g(y);b = h(y)
Run Code Online (Sandbox Code Playgroud)
)
码
import time
def f(t):
time.sleep(1)
print 'f called'
return t
def g(t): return 1
def h(t): return 2
a,b = g(f(x)),h(f(x))
a,b = ((g(y),h(y)) for y in (f(x),)).next()
Run Code Online (Sandbox Code Playgroud) 我在运行这个Haskell代码时遇到了这个非常烦人的错误.由于某种原因,它不喜欢第一行delLast :: (Ord a) => [a] -> [a]
delLast :: (Ord a) => [a] -> [a]
delLast [] = []
delLast (x:[]) = []
delLast (x:xs) = [x] ++ delLast xs
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么我得到这个错误?谢谢.
这是我得到的错误:
parse error on input `='
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud) 这篇博文提出了一个curried附加函数的实现:
def addN(n):
return lambda x: x + n
def plus(a, b):
addA=addN(a)
return addA(b)
Run Code Online (Sandbox Code Playgroud)
我相信我的版本更正确,因为它一直使用一元函数.
from operator import add
plus = lambda a: lambda b: add(a, b)
plus(1)(2)
Run Code Online (Sandbox Code Playgroud)
你怎么看 ?
我有一个基本实现的MyService接口MyServiceImpl.我将其包装MyServiceImpl成一系列MyService装饰器.
为此,我创建了MyServiceDelegate一个抽象类,它接受一个MyService实例并将所有服务调用委托给提供的MyService实例.
但是在我的单元测试中,对于特定需求,我需要找回第一个真正的实现MyService,即MyServiceImpl,我只有一个MyService引用装饰器.
我只是想知道是否可以使用Guava,以功能性的方式进行递归,这将返回我已经装饰了很多层并且不是委托服务的"原始服务".我想使用像Function这样的函数来返回委托服务,如果是原始服务,则使用null,但不知道是否使用它.
我知道我可以通过while循环轻松完成,而且我不是在寻找替代解决方案.只想知道番石榴是否可以解决这些问题.
我在现场观看了一个人们说他们在工作中正在进行Scala功能,他们使用案例类,将类型转换为另一种类型,到处都是不变性等等.
这实际上是如何工作的?我希望通过纯粹的功能方法看到一个简单的hello world应用程序.
我也看不出我怎么能var完全摆脱因为有时我只是需要它.
为什么Fibonacci递归程序工作这么久?
这是在OCaml:
let rec fib n = if n<2 then n else fib (n-1) + fib (n-2);;
Run Code Online (Sandbox Code Playgroud)
这是在Mathematica:
Fib[n_] := If[n < 2, n, Fib[n - 1] + Fib[n - 2]]
Run Code Online (Sandbox Code Playgroud)
这是在Java中:
public static BigInteger fib(long n) {
if( n < 2 ) {
return BigInteger.valueOf(n);
}
else {
return fib(n-1).add(fib(n-2));
}
}
Run Code Online (Sandbox Code Playgroud)
因为n=100它工作了很长时间,因为,我猜,它会2^100及时跟踪节点树.
虽然只生成100个数字,但它只能消耗100个内存寄存器和100个计算机.
因此,可以优化执行.
这项任务是什么以及如何解决?由于Mathematica中没有实现解决方案,因此可能不存在.关于此事的研究怎么样?
recursion ocaml functional-programming wolfram-mathematica compiler-optimization
我打算编写一个map函数,该函数本质上需要一个变量和一个列表,并返回一个列表。
我尝试使用标准地图,但是从这里我看到的是它在格式“地图功能列表”中时,我试图传递另一个参数,这是另一点。
data Point = {xCoord :: Int,
yCoord :: Int}
movePoint :: Point -> Point -> Point
movePoint (Point x y) (Point xMove yMove)
= Point (x + xMove) (y + yMove)
// Add a "vector" to a list of points
movePoints :: [Point] -> Point -> [Point]
movePoints = error "Not yet"
Run Code Online (Sandbox Code Playgroud)
例如,如果我有一个矢量,例如(2,2),并且我有一个点列表,例如[(-2,1),(0,0),(5,4)等],我想使用映射以将(2,2)添加到列表中的所有点并返回点列表,我不确定该怎么做。我是Haskell的新手,所以任何提示都很棒。
我试图了解如何在Haskell中使用zip。我最近一直在学习Haskell,并试图从两个单独的列表中创建一个元组列表
我有以下几点:
createList :: [Char] -> [Char] -> [(Char,Char)]
createList xs ys = zip(xs,ys)
Run Code Online (Sandbox Code Playgroud)
我知道zip应该创建给定两个列表的元组列表,但是出现以下错误:
Couldn't match expected type ‘[a0]’
with actual type ‘([Char], [Char])’
Run Code Online (Sandbox Code Playgroud)
谁能向我解释我在哪里绊脚?