【发布时间】:2016-03-08 12:34:28
【问题描述】:
所以对于任何给定的语言,如果我们两次使用不同的语法(即使用i++而不是i+1)实现相同的程序(即任何给定输入的相同输出),这两个程序是否具有相同的语义?为什么?
如果我们使用不同的构造(即Arrays vs Arraylists),这同样适用吗?
谢谢
【问题讨论】:
标签: semantics
所以对于任何给定的语言,如果我们两次使用不同的语法(即使用i++而不是i+1)实现相同的程序(即任何给定输入的相同输出),这两个程序是否具有相同的语义?为什么?
如果我们使用不同的构造(即Arrays vs Arraylists),这同样适用吗?
谢谢
【问题讨论】:
标签: semantics
是的。根据编程语言的不同,可能存在(组合)具有相同语义的不同语法结构。
例如,我们可以定义一种具有 3 个构造的编程语言:A 和 B,它们在语义上是等效的,以及组合(例如,XY 用于任何 X 和 Y,其中任何一个这些可以是A、B 或其任何组合)。因此程序A 等价于程序B。另外AA 等于AB、BA 和BB 等。
此外,如果我们用C 扩展语言,它在语义上等同于AA,那么,例如,BC 等同于AAA 等等。
【讨论】:
所以对于任何给定的语言,如果我们两次实现相同的程序(即任何给定输入的相同输出),使用不同的语法(即使用 i++ 而不是 i+1)这两个程序会具有相同的语义吗?
这个问题是同义反复。答案是肯定的。很明显。
如果两个不同的程序对所有可能的输入集产生相同的结果,那么它们确实具有相同的语义。根据定义1。
为什么?
因为这就是“相同语义”的意思!
这同样适用于我们使用不同结构(即数组与数组列表)的情况吗?
是的。
(一个数据结构可能会使用更多内存,这可能会导致一个版本的 OOME 而不是另一个版本……对于某些输入数据集。但是我会争辩说,这些程序不会对所有可能的结果产生相同的结果输入。)
请注意,这适用于所有实用的编程语言。任何一种编程语言,其中的程序只能以一种方式编写......可能过于严格而无法使用。
1 - 好的,所以任何学习过编程语义的人在读到它时都可能会很适合。但我试图提供一个直观的解释,而不是一个具有良好数学基础的解释。课程用马……正如他们所说。
【讨论】: