标签: language-theory

可变和不可变类型背后的理论是什么?

我钦佩Python的一个原因是它区分了可变类型和不可变类型.在进入Python之前花了一段时间在c编程,我很惊讶Python如何轻松地消除指针解除引用的所有复杂性,这让我很生气.在Python中,一切都按照我期望的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用.

当然还有一些皱纹(可变函数参数默认是一个值得注意的例子)但总的来说,我觉得可变/不可变的区别大大澄清了变量及其值什么以及它们应该如何表现的问题.

但是它来自哪里?我必须假设GvR不是第一个设想这种区别的人,并且Python不是第一个使用它的语言.我有兴趣听听使用这个概念的早期语言,以及任何早期的理论讨论.

python language-theory mutable immutability

18
推荐指数
3
解决办法
1930
查看次数

将此/自指针强制显式有什么好处?

this/ self/me指针强制显式有什么好处?

根据OOP理论,一个方法应该主要(仅?)对成员变量和方法的参数进行操作.在此之后,它应该是更容易指成员变量,而不是外部的(从视图中的对象的一侧)变量...明确this使得它更详细因而更难指成员变量,而不是外部因素.这对我来说似乎很直观.

language-agnostic oop programming-languages language-theory

17
推荐指数
1
解决办法
4295
查看次数

SLR(1)Parser和epsilon参与其中

我们假设我有以下语法:

S ? X  
X ? a | ?
Run Code Online (Sandbox Code Playgroud)

如果那个语法没有?涉及,我会构建第一个状态,如:

S' ? .S
S ? .X
X ? .a
Run Code Online (Sandbox Code Playgroud)

但这个?符号怎么样?我应该包括:

X ? .?
Run Code Online (Sandbox Code Playgroud)

太?

如果是这样......当创建下一个州......我应该这样做GOTO(Io,?),是否是第一个州?

theory grammar parsing compiler-theory language-theory

15
推荐指数
2
解决办法
6293
查看次数

老年人计算机科学

我学习了C++,当它是C语言时.我发现自己越来越不喜欢XML和垃圾收集等新技术.另一方面,我发现了像Lua和Python这样的脚本语言.而且我发现自己更喜欢C++的混合环境,具有确定性内存控制,嵌入式脚本语言,垃圾收集以及所有这些.

我的问题是,当我试图学习这些语言时,我发现自己遇到了一些我不理解的术语:lambdas,closures等.

有哪些在线资源可供老年人了解这些内容?

computer-science language-theory terminology

14
推荐指数
4
解决办法
784
查看次数

静态输入语言意味着什么?

我的理解是,这意味着可以编写一个程序来正式证明用静态类型语言编写的程序将没有某些(小)缺陷子集.

我的问题如下:

假设我们有两种图灵完整语言,A和B.A被认为是'类型安全'而'B'被假定为不是.假设我有一个程序L来检查用A写的任何程序的正确性.什么阻止我将用B写的任何程序翻译成A,应用L.如果P从A转换为B,那么为什么不是PL a用B编写的任何程序的有效类型检查器?

我接受过代数培训,而且我才刚开始学习CS,所以可能有一些明显的原因,这不起作用,但我非常想知道.整个'类型安全'的东西已经有一段时间闻到了我的味道.

language-theory turing-complete type-safety

14
推荐指数
2
解决办法
834
查看次数

具有偶数a和奇数no的字符串的正则表达式

我在解决这个问题时遇到了问题: - 它是一个任务,我解决了它,但它看起来太长而且模糊,可以帮助我,请帮助我......

具有偶数个a和奇数个b的字符串的正则表达式,其中字符集= {a,b}.

string language-theory regular-language

14
推荐指数
2
解决办法
7万
查看次数

除了Logo和Emacs Lisp之外,还有哪些纯动态范围的语言?

动态范围语言的一些示例是什么?选择那个设计的原因是什么?是因为它易于实施吗?

lisp language-agnostic programming-languages language-theory logo-lang

12
推荐指数
3
解决办法
2843
查看次数

为什么在卷曲的支架后不需要分号?

我知道在声明(我正在谈论Java,C++和类似语言)之后需要分号,但在卷曲括号之后不需要分号.为什么这样?

if (a > b) 
  printf("hello!"); // semicolon is mandatory

if (a > b) {
  printf("hello!");
} // semicolon is not required
Run Code Online (Sandbox Code Playgroud)

是什么原因?我的意思是,这背后的理论是什么?

c++ java syntax language-theory

12
推荐指数
3
解决办法
4734
查看次数

10
推荐指数
5
解决办法
2795
查看次数

CPS转换后的管理重新索引究竟是什么?

在Scheme和CPS转换的上下文中,我在确定哪些管理重新索引(lambdas)确实存在时遇到了一些麻烦:

  • CPS转换引入的所有 lambda表达式
  • 只有 CPS转换引入的lambda表达式,但如果您"手动"或通过更智能的CPS转换器进行转换,则不会写入

如果可能的话,欢迎提供良好的参考.

scheme continuations language-theory continuation-passing

9
推荐指数
1
解决办法
574
查看次数