我发现很多人可以互换地使用闭包和块 。 这些人大多不能解释他们在说什么。 一些Java程序员(甚至是来自非常昂贵的咨询公司的人)都会将匿名内部类作为“块”和“闭包”进行讨论 – 但我知道这不是事实。 (你不能在它们被定义的方法范围内传递可变variables…) 我在找: 一个精确的,计算机科学的块定义 一个精确的计算机科学的封闭定义 并澄清两者的区别 。 我真的很希望看到这些链接,文章或书籍参考 。
我可以看到人们总是问是否应该在下一个版本的C#或Java中包含多重inheritance。 有幸拥有这种能力的C ++人士说,这就像给某人一根绳子最终挂上钩。 什么是多重inheritance的问题? 有没有具体的样品?
如果没有,是否有一个很好的反例,显示一个迭代algorithm,其中不存在recursion对应? 如果所有迭代algorithm都可以recursion表示,那么这种情况是否更难? 另外,编程语言在这一切中扮演着什么angular色? 我可以想象,Scheme程序员对于迭代(=尾recursion)和堆栈使用有不同的看法,而不是只用Java的程序员。
我一直想玩一段时间写自己的语言(表面上是为了学习经验),因此需要相对build立parsing器,解释器和编译器。 所以: 有没有人知道构buildparsing器,解释器和编译器有什么好的资源? 编辑:我不在寻找编译器/编译器/parsing器编译器,如Lex,Yacc和野牛…
真正的现代正则表达式实际上认可什么类型的语言? 每当有一个带有反向引用的无限长度捕获组(例如(.*)_\1 ),正则表达式现在就匹配一个非正则语言。 但是,它本身不足以匹配像S ::= '(' S ')' | ε S ::= '(' S ')' | ε – 匹配成对副本的上下文无关语言。 递归正则表达式(对我来说是新的,但我确信存在于Perl和PCRE中)至少可以识别大多数CFL。 有没有人做过或读过这方面的研究? 这些“现代”正则表达式的局限性是什么? 他们是否认可LL或LR语法的严格多于或者少于CFG? 或者是否存在可以被正则表达式识别但不是CFG的两种语言,反之亦然? 有关论文的链接将不胜感激。