在结构(或类)中,我知道我可以添加一个函数,然后再调用它。
struct State {
int turnsLeft;
void nextTurn() {
turnsLeft--;
}
};
State s1{1};
State s2{2};
s1.nextTurn();
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些函数与结构占用的空间有什么关系?我知道 int 是 4 个字节,因此创建 s1 和 s2 至少需要 4*2=8 个字节。但是,每次我创建一个新结构时,都会创建这个函数的一个新副本,还是无论State我创建多少个不同的函数,都只会创建和共享该函数的一个副本?如果每次都复制该函数,如何编写代码以便只制作该函数的一个副本?静态函数不能很自然地工作,因为我想this在修改turnsLeft.
我是 Haskell 的新手,并且一直在通过做一些简单的编程挑战来练习。最近两天,我一直在尝试在这里实现无界背包问题。维基百科页面上描述了我使用的算法,但对于这个问题,“重量”一词被替换为“长度”一词。无论如何,我开始编写没有记忆的代码:
maxValue :: [(Int,Int)] -> Int -> Int
maxValue [] len = 0
maxValue ((l, val): other) len =
if l > len then
skipValue
else
max skipValue takeValue
where skipValue = maxValue other len
takeValue = (val + maxValue ([(l, val)] ++ other) (len - l)
Run Code Online (Sandbox Code Playgroud)
我曾希望 haskell 会很好,并且有一些很好的语法#pragma memoize来帮助我,但是四处寻找示例,解决方案是用这个斐波那契问题代码解释的。
memoized_fib :: Int -> Integer
memoized_fib = (map fib [0 ..] !!)
where fib 0 = …Run Code Online (Sandbox Code Playgroud) performance haskell knapsack-problem memoization dynamic-programming