天道酬勤,学无止境

language-theory

允许递归构造函数的可能好处(如果有的话)是什么?(What is the possible benefit (if any) of allowing recursive constructors?)

问题 在 Java 中,构造函数不能递归。 编译时错误:“递归构造函数调用”。 让我们假设我们没有这个限制。 要记住的事情: 构造函数的返回类型是 void。 由于它是一种 void 方法,因此您无法利用递归的全部功能。 构造函数可以使用 this() 调用自身(或任何其他构造函数)。 但是“对 this 的调用必须是构造函数中的第一条语句” 我们可以在连续调用之间使用非本地数据,仍然可以从递归构造函数中获得一些可能的收益。 允许递归构造函数有什么好处吗? 回答1 构造函数(当它们相互调用时)就像返回void方法。 因此,它们产生结果的唯一方法是通过副作用。 然后,这仅限于改变他们正在构造的对象或改变作为参数传入的值。 后者在构造函数中是一个非常讨厌的想法; 构造函数通常从其参数中获取信息而不改变它们。 因此,改变正在构造的对象是唯一的选择,以便有任何方法来跟踪递归的进度,以便它最终终止。 很难看出与普通构造函数中的简单循环相比,它如何更容易编写、更清晰易读等。 从构造函数中调用另一个构造函数(使用this )当然与在构造函数中使用new表达式完全不同: class Node { Node _left, _right; public Node(Node left, Node right) { _left = left != null ? new Node(left._left

2021-09-14 05:23:12    分类:技术分享    java   recursion   constructor   language-theory

What is the possible benefit (if any) of allowing recursive constructors?

In Java, constructors cannot be recursive. Compile time error: "recursive constructor invocation". Let's assume that we did not have this restriction. Things to keep in mind: The return type of a constructor is void. Since it is a void method you can't harness the complete power of recursion. A constructor can invoke itself (or any other constructor) using this(). But a "call to this must be first statement in constructor" We could use non local data between consecutive calls to still have some possible gain from recursive constructors. Would there be any benefit from allowing recursive

2021-09-01 07:09:14    分类:问答    java   recursion   constructor   language-theory

What is the definition of a “true” multidimensional array and what languages support them?

Most of the programming books I have ever read, have the following line: "X language does not support true multidimensional arrays, but you can simulate (approximate) them with arrays of arrays." Since most of my experience has been with C-based languages, i.e. C++, Java, JavaScript, php, etc., I'm not sure of what a "true" multidimensional array is. What is the definition of a true multidimensional array and what languages support it? Also, please show an example of a true multidimensional array in code if possible.

2021-07-11 19:45:45    分类:问答    language-agnostic   multidimensional-array   jagged-arrays   language-theory

What actually is the assignment symbol in python?

Most sources online call = (and +=, -=, etc...) an assignment operator (for python). This makes sense in most languages, however, not in python. An operator takes one or more operands, returns a value, and forms an expression. However, in python, assignment is not an expression, and assignment does not yield a value. Therefore, = cannot be an operator. So what exactly is it? In a statement like x = 0, x is an identifier, 0 is a numeric literal, but I don't know what to call "=".

2021-07-02 20:29:41    分类:问答    python   operators   language-theory

Analyzing Text for Accents

This is the first part of another question of mine that had a recommendation to make it two questions: Adding Accents to Speech Generation. Summary: The other question asks how to add an accent programatically to generated speech. Not an accent mark or inflection, but a full accent like a British or Scottish or Russian one. The first question (same as this one) asks how the original text could be analyzed to determine what accents need to be added and where. Basically, how could text be analyzed to find these accents and generate a set of instructions that could be used to add any accent to

2021-07-02 10:23:15    分类:问答    audio   text-to-speech   language-theory

具有偶数个 a 和奇数个 b 的字符串的正则表达式(Regular expression for strings with even number of a's and odd no of b's)

问题 我在解决问题时遇到了问题:- 这是一个作业,我解决了它,但它似乎太长且含糊不清,请任何人帮助我...... 具有偶数个 a 和奇数个 b 的字符串的正则表达式,其中字符集={a,b}。 回答1 一种方法是通过两个正则表达式传递它以确保它们都匹配(假设您根本想使用正则表达式,请参见下面的替代方案): ^b*(ab*ab*)*$ ^a*ba*(ba*ba*)*$ 其他任何事情(事实上,甚至那个)很可能只是一种聪明的尝试,通常是一个巨大的失败。 第一个正则表达式确保在混合中的任何地方(之前、之后和之间)都有偶数个a和b 。 第二个是类似的,但通过起始a*ba*确保有奇数个b 。 一个更好的方法是完全忽略正则表达式并简单地运行字符串,如下所示: def isValid(s): set evenA to true set oddB to false for c as each character in s: if c is 'a': set evenA to not evenA else if c is 'b': set oddB to not oddB else: return false return evenA and oddB 尽管正则表达式是一个很棒的工具,但它们并不适合所有情况,而且随着可读性和可维护性的降低,它们的用处也越来越小。 就其价值而言,单一正则表达式的答案是:

2021-06-24 05:28:18    分类:技术分享    string   language-theory   regular-language

Adding Accents to Speech Generation

The first part of this question is now its own, here: Analyzing Text for Accents Question: How could accents be added to generated speech? What I've come up with: I do not mean just accent marks, or inflection, or anything singular like that. I mean something like a full British accent, or a Scottish accent, or Russian, etc. I would think that this could be done outside of the language as well. Ex: something in Russian could be generated with a British accent, or something in Mandarin could have a Russian accent. I think the basic process would be this: Analyze the text Compare with a database

2021-06-14 07:45:04    分类:问答    algorithm   audio   signal-processing   text-to-speech   language-theory

Why semicolon is not required after a curled bracket?

I know that a semicolon is required after a statement (I'm talking about Java, C++, and similar languages), but is not required after a curled bracket. Why so? if (a > b) printf("hello!"); // semicolon is mandatory if (a > b) { printf("hello!"); } // semicolon is not required What is the reason? I mean, what is the theory behind this?

2021-06-13 13:14:55    分类:问答    java   c++   syntax   language-theory

“闭包”和“块”到底有什么区别?(Exactly what is the difference between a “closure” and a “block”?)

问题 我发现很多人交替使用闭包和块这两个词。 大多数人无法解释他们在说什么。 一些 Java 程序员(甚至那些来自非常昂贵的咨询公司的程序员)将匿名内部类称为“块”和“闭包”——但我知道这不是真的。 (您不能从定义它们的方法的范围内传递可变变量......) 我在找: 一个块的精确的计算机科学定义闭包的精确的计算机科学定义并澄清两者之间的区别。 我真的很想看到关于这些的链接、文章或书籍参考。 回答1 虽然块只是一段可以由语句和声明组成的代码,但没有别的,闭包是一个真正的第一类对象,一个真正的变量,它的值是一个块。 主要区别在于块只是将指令组合在一起(例如while语句的主体),而闭包是一个变量,其中包含一些可以执行的代码。 如果你有一个闭包,通常你可以将它作为参数传递给函数,对其进行柯化和去柯化,主要是调用它! Closure c = { println 'Hello!' } /* now you have an object that contains code */ c.call() 当然,闭包更强大,它们是变量,可用于定义对象的自定义行为(而通常您必须在编程中使用接口或其他 OOP 方法)。 您可以将闭包视为一个函数,其中包含该函数在其自身内部所做的事情。 块很有用,因为它们允许确定变量的范围。 通常,当您在作用域内定义变量时,您可以毫无问题地覆盖外部定义

2021-06-10 14:51:01    分类:技术分享    programming-languages   computer-science   theory   language-theory

上下文无关语言问题(抽取引理)(Context Free Language Question (Pumping Lemma))

问题 我知道这与编程没有直接关系,但是我想知道是否有人知道如何将抽运引理应用于以下证明: 证明L = {((a ^ n)(b ^ n)(c ^ m):n!= m}不是上下文无关的语言 我对运用抽水式引理非常有信心,但是这个真的让我很讨厌。 你怎么看? 回答1 编辑:我完全带领你走错了路。 当我自己还没有完全解决问题时,当我尝试提供帮助时,就会发生这种情况。 奥格登的引理 假设L是上下文无关的。 根据奥格登的引理,存在一个整数p,它具有以下属性: 给定L中的字符串w至少长p个符号,其中至少p个符号被“标记”,则w可以表示为uvxyz,满足: x至少有一个标记符号, u和v都带有标记符号,或者y和z都带有标记符号, vxy最多具有p个标记符号,并且对于i> = 0,uv i xy i z在L中 那是奥格登的引理。 现在,让q为一个整数,该整数可被每个不大于p的正整数整除。 令w = a p + q b p + q c p 。 标记每一个c。 通过#2,u或v必须包含至少一个c。 如果u或v包含任何其他符号,则#4失败,因此u和v必须仅包含c。 但是当i = q / | uv |时,#4失败。 我们知道q可被| uv |整除。 因为p> | uv | > 0,且q可被小于p的所有正整数整除。 请注意,标记所有符号时,奥格登的引理变成抽水引理。 抽引引物 假设L是上下文无关的。

2021-05-31 18:41:50    分类:技术分享    theory   automata   proof   language-theory