Questions tagged «loops»

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
do-while循环足以满足图灵完整性吗?
我知道,在命令式编程语言中,while-do循环足以构成使图灵完成的语言的控制流构造(就控制流而言,当然,我们还需要无限制的内存和某些运算符...) 。我的问题的要点是:do-while循环是否具有与while-do-循环相同的计算能力?换句话说,如果不可能完全跳过指令,那么一种语言可以是图灵完备的吗? 我意识到这里的某些语义可能有点模棱两可,所以让我用一个特定的例子来表达实际问题: Brainfuck(BF)是一个图灵tarpit,其中唯一的控制流是while-do循环,表示为[...](问题的底部有一个完整的语言规范,以防您不熟悉Brainfuck。让我们定义一种新的语言BF *,它,.+-<>的语义与BF中的语义相同,但是代替它的[]是{},它具有do-while循环。也就是说,与BF的唯一区别是每个循环至少可以执行一次,然后才能跳过进一步的迭代。 BF *图灵完成了吗?如果是这样,我会对如何将BF转换为BF *感兴趣。如果不是,我该如何证明? 我自己的一些观察: 并非每个BF程序都可以转换为BF *。例如,不可能用BF *编写可能会或可能不会读取或打印值的程序-如果该程序可能打印一个或多个值,它将始终打印至少一个。但是,可能存在BF的图灵完备子集,可以将其转换为BF *。 我们不能简单地将[f](f仅由组成的任意Brainbrauck程序翻译成+-[]<>)(以消除第一次迭代的效果),因为a)并非每个可计算的函数都具有可计算的逆,并且b)即使有,循环次数不一定会比因此少,因此不能保证首先递归地执行此步骤。f-1{f}f-1f 这是Brainfuck语言的快速概述。Brainfuck在无限磁带上操作,其中每个单元包含一个字节值,最初为零。溢出会回绕,因此增加255可得到0,反之亦然。该语言包含8条指令: + Increment the current cell. - Decrement the current cell. > Move tape head to the right. < Move tape head to the left. , Input a character from STDIN into the current cell. . …

3
为什么循环比递归快?
在实践中,我知道任何递归都可以写成一个循环(反之亦然(?)),如果我们用实际的计算机进行测量,我们发现对于相同的问题,循环比递归要快。但是,有什么理论可以使这种区别发生或者它主要是实证的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.