一个reddit线程提出了一个显然有趣的问题:
尾递归函数可以简单地转换为迭代函数.其他的,可以通过使用显式堆栈进行转换.可每次递归转化为迭代?
帖子中的(计数器?)示例是对:
(define (num-ways x y)
(case ((= x 0) 1)
((= y 0) 1)
(num-ways2 x y) ))
(define (num-ways2 x y)
(+ (num-ways (- x 1) y)
(num-ways x (- y 1))
Run Code Online (Sandbox Code Playgroud) 在C API中分配内存的正确/首选方法是什么?
我首先看到两个选项:
1)让调用者完成所有(外部)内存处理:
myStruct *s = malloc(sizeof(s));
myStruct_init(s);
myStruct_foo(s);
myStruct_destroy(s);
free(s);
Run Code Online (Sandbox Code Playgroud)
该_init和_destroy功能是必需的,因为一些更多的内存可分配里面,而且必须在某个地方处理.
这样做的缺点是更长,但在某些情况下也可以消除malloc(例如,它可以传递给堆栈分配的结构:
int bar() {
myStruct s;
myStruct_init(&s);
myStruct_foo(&s);
myStruct_destroy(&s);
}
Run Code Online (Sandbox Code Playgroud)
此外,调用者必须知道结构的大小.
2)隐藏mallocs in _init和freein in _destroy.
优点:代码更短,因为无论如何都会调用函数.完全不透明的结构.
缺点:无法传递以不同方式分配的结构.
myStruct *s = myStruct_init();
myStruct_foo(s);
myStruct_destroy(foo);
Run Code Online (Sandbox Code Playgroud)
我目前正在倾向于第一个案例; 然后,我不知道C API设计.
什么是最佳做法?
我用Google搜索,并没有达成共识.每个人都说了些什么,然后把它拿回来.我发现围绕着愚蠢的会议......
那么,这笔交易是什么?
我应该如何设计一个"正确的"OO Pong?
正确的想法是任何元素都可以改变:球,球场和桨的形状,增加障碍物,甚至"通电",如"可以将球粘到桨上".
目前,两个更紧迫的问题是:
我正在努力学习Smalltalk,所以我通过建立一个简单的"Matrix"类来掌握语法和风格.
首先,如果链接到一个好的Smalltak教程(尽管这完全是可选的),我将不胜感激,最好不要使用GUI(我宁愿输入我的.sts而不是层次结构浏览器中的鱼来放置)他们所处的方法).
然后,关于TDD:对于我打电话的这个项目gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests,肯定会有更好的方式.在那儿?
最后,关于断言:我正在尝试编写一个方法并将断言置于其中,例如:
Matrix>>multiplyBy: anotherMatrix [
[ self isNotEmpty ] assert.
"Do Multiplication"
[ result dimensions = (self height)@(anotherMatrix width) ] assert.
]
Run Code Online (Sandbox Code Playgroud)
我怎么能做那种断言?
编辑:明确标记的问题.
当用户开始在搜索框上键入时,建议页面将返回与该nama匹配的所有集合中的最新项目以及其他数据.
我想显示该项目(沿着其图像),以及"查看此集合中的所有项目"的链接.
我可以通过以下代码完成(大部分):
$('#search').autocomplete({
source: function (request, response) {
$.ajax({
url: suggesturl,
dataType: 'json',
data: request,
success: function (data) {
response(data.map(function (value) {
return {
'label': '<img src="' + value.thumbsmall + '" />' + value.name + '<a href="/">More items from this collection...</a>',
'value': value.fullname
};
}));
}
});
},
minLength: 3
})
Run Code Online (Sandbox Code Playgroud)
问题是,虽然链接出现在框中,但当它被单击时,它会被忽略,并执行默认select操作(项目value被放入文本框).
有谁可以用一个例子向我解释一下这个问题?我自相矛盾了
两者似乎都是自相矛盾的.可以用一个例子解释一下吗?可能在.NET框架中.
我正在尝试设计一个简单的游戏--- Pong,Arkanoid ---严格使用"正确的OO",不管这意味着什么.
所以,通过将自己设计为死亡,我正试图达到一个下一次我会知道该做什么或不做什么的点......
谁应该处理,例如,结果?和记分?
我的第一个想法是给球做几个工作,但是开始以指数形式扩展到一个神对象:球会知道它在哪里,它撞到了谁,并向记分对象报告.
这对于糟糕的球来说太过分了.
我喜欢Google Code是Mercurial托管的免费选项,但是在我设置的测试项目中,我找不到将存储库指定为私有的方法.
理想情况下,我想私下处理一个项目,直到它为世界准备好看,然后才开放给其他人.
有没有办法在Google Code上执行此操作?
当我们初始化一些整数值时
int a = 10;
Run Code Online (Sandbox Code Playgroud)
要么
Integer b = new Integer(20);
Integer b = 30;
Run Code Online (Sandbox Code Playgroud)
那些在内存中创建的对象在哪里?
有没有像Integer-Pool这样的概念,比如我们有String-Pool for String?