你总是可以构建一个递归函数来消除尾部调用吗?如果没有,那么限制堆栈大小的其他策略是什么?
例如:(灵感来自Break或shortcircuit Scala中的折叠)
// Depth-first search of labyrinth, with large depth > stacklimit
def search ( labyrinth: SearchDomain,
path: List[SolutionNode],
goal: DesiredResult ) = {
if ( path.head == goal ) return path
candidates: List[SolutionNode] = labyrinth.childNodes(path)
candidates.find { c =>
Nil != search( labyrinth, c :: path, goal ) // potential boom!
} match {
case Some(c) => c :: path
case None => Nil
}
}
Run Code Online (Sandbox Code Playgroud)
我们的目标不是挑选这个特定的功能,而是将其用作学习限制堆栈大小的技术.
UPDATE
我从中得到的结论是:
如果问题域是递归可能会达到堆栈大小的限制:
将代码重写为scala-compiler-version-of-tailcall-optimizable.这可以通过新的(2.8)@scala.annotation.tailrec注释来辅助/验证.
如果这不可行,请将其重写为使用迭代循环结构.
我也感觉到这种重写(任何一种情况)都需要一定的技能/才能/智慧/练习.
我很惊讶我找不到更多关于使用ASP.NET MVC困扰我的项目的问题的讨论.
如何处理具有多个项目的Visual Studio解决方案?MVC框架在主项目中具有Models/Views/Controllers文件夹.但是,如果您想沿着逻辑分组将解决方案分解为多个项目并将模型/视图/控制器与其一起带来怎么办?当我提前到项目结束时,每个文件夹中都会有很多类.它不会绘制一个干净整洁的结构,有助于维护.我们想要一种方法将类移动到与它们相关的项目,或者至少使用文件夹结构来帮助组织.
我假设一个选项是在主项目使用的所有其他项目中使用相同的命名空间,但我不是那种方法的忠实用户b/c这不是我们通常的方法在定义命名空间时采用.
我想我们至少可以在M/V/C文件夹中创建子文件夹,而不是将文件夹名称转发到命名空间.我假设那些课程可以找到?
我们项目的一些背景:它是一个面向公众的网站,有许多用户可以执行的业务交易(大约50-60).每个事务都有一系列用户导航的网页,以完成网站提供的不同服务.我们正在为每个事务使用单个控制器(关于我们是否应该为每个事务定义一个控制器,或者我们是否应该使用更高级别的分组并因此减少控制器的数量,我们已经进行了很长时间的讨论,但是我们已经有一些信息了在网上遇到(http://codebetter.com/blogs/ian_cooper/archive/2008/12/03/the-fat-controller.aspx)让我们做出了这个决定.)
有什么建议?让其他人以他们满意的方式解决这个问题吗?
谢谢乔恩.
我正在尝试同步两个属性网格的垂直滚动条.这个想法是当用户滚动一个属性网格时,另一个属性网格滚动相同的量.
我的第一种方法是处理滚动事件,但似乎PropertyGrid不会生成这种事件.我查看了PropertyGrid中包含的控件,并且有一个PropertyGridView,我敢打赌是带滚动条的控件.
有人知道解决方法来实现我想要的吗?
谢谢.
发送EM_SETCUEBANNER消息时,编辑控件中会出现灰色文本提示.如何在Win32/C中更改文本提示的颜色?
在C++/MFC中,显示带有"不再显示此选项"选项的消息框的最简单方法是什么?
就我而言,我只想要一个简单的MB_OK消息框(一个OK按钮).
我在下面有这个代码来动态填充我的UITableView.
我必须显示两种单元格:带有背景图像的常规单元格和带有常规背景图像的单元格,以及标签和按钮.
如果Indexpath.row小于控制变量,则绘制常规单元格.如果不是,则绘制带有按钮和标签的单元格.
这是代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
}
UIImage *imageU;
if (indexPath.row < controlVariable) {
imageU = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]] autorelease];
cell.imageView.image = imageU;
} else {
imageU = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat: @"table-pg%d",numberX]
ofType:@"jpg"]] autorelease];
cell.imageView.image = imageU;
NSString * myString = [NSString stringWithFormat: @"pago%d", numberX];
UILabel …
Run Code Online (Sandbox Code Playgroud) 除了Microsoft文档之外,Microsoft Reactive(Rx)框架是否有一个很好的介绍和教程?
此外,Reactive使用常规异步编码技术解决难以解决的编程问题更容易成为一个很好的例子(使用代码)?
我从Facebook Connect获取一些数据(使用FBConnect Objective-C 2.0框架),我正在NSOperation中完成所有这些工作.它在NSOperation中,因为我还运行了其他几个操作,这就是其中之一.
问题是所有FBConnect调用都是异步的.因此,NSOperation的主要方法快速完成,操作标记为已完成.
有办法克服这个问题吗?看来FBConnect中没有同步选项!
非常感谢,
麦克风
asynchronous ×2
c++ ×2
iphone ×2
.net ×1
asp.net-mvc ×1
c ×1
c# ×1
fbconnect ×1
messagebox ×1
mfc ×1
nsoperation ×1
propertygrid ×1
recursion ×1
rule-engine ×1
scala ×1
vim ×1
winapi ×1
winforms ×1