免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wwwsq
打印 上一主题 下一主题

531,继续抽某昏昏 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
121 [报告]
发表于 2012-09-24 17:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
122 [报告]
发表于 2012-09-24 17:34 |只看该作者
pmerofc 发表于 2012-09-24 17:23
作者自己对表达式、左值、右值等概念根本不清楚
以其昏昏使人昭昭



老谭的基础概念是很清晰的。是你根本就没读懂。

正是因为你基础概念不清,所以你才会说“变量本身就是表达式”。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
123 [报告]
发表于 2012-09-24 17:38 |只看该作者
pmerofc 发表于 2012-09-24 17:22
我是被他们硬拉进来的啊

看那哥们贴的haskell的产生式,就可以确认,起码在haskell里说变量就是(一种/一个)表达式没什么问题。顺带,翻了翻lua的Reference Manual:
        exp ::= prefixexp
        exp ::= nil | false | true
        exp ::= Number
        exp ::= String
        exp ::= functiondef
        exp ::= tableconstructor
        exp ::= ‘...’
        exp ::= exp binop exp
        exp ::= unop exp
        prefixexp ::= var | functioncall | ‘(’ exp ‘)’
lua里面这么说也没问题。


C还这么特殊,连变量的概念都这么与众不同?何况C标准里面都没有明确定义变量,更别提“变量名”这玩意了。

先写这些,吃饭去了,鬼扯这些没用的可没吃饭重要。

论坛徽章:
0
124 [报告]
发表于 2012-09-24 23:35 |只看该作者
pmerofc 发表于 2012-09-24 16:27
还有一点补充
就是在C代码这个层面上,变量名是变量的唯一的直接指代,有必要区别两者吗


比如:

void f1(int i)
{
  i = 1;
}

void f2(int i)
{
  i = 1;
}

你能指着这段程序直接说“变量i”而不指出是在哪个地方的么?
两处 i = 1 作为表达式、其中的 i 作为标识符或变量名完全等价。但是谁都应该知道两处 i = 1 中的 i 指代的是两个不同的变量

所以说需要限定作用域。

论坛徽章:
0
125 [报告]
发表于 2012-09-24 23:42 |只看该作者
回复 110# pmerofc

因为它没有引起误解

事实上,它已经引起了误解:到底变量可不可以无限制地作为变量名的等义词?如果有答案,总有一方的理解是有问题的。
除了对C++ variable 概念理解很深入的人

未必,比如说LZ。尽管理由看起来更多是凭借直觉而不是可靠的、可查证的依据,这并不是说这种观点完全是无理取闹。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
126 [报告]
发表于 2012-09-24 23:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
127 [报告]
发表于 2012-09-24 23:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
128 [报告]
发表于 2012-09-25 00:17 |只看该作者
回复 111# starwing83


乱了……看来是我用词不够清楚。
好吧,先顺着你原来那楼说。
从这个定义看出来,identifier是variable的组成部分之一。而identifier是expression,即variable的组成部分之一可以作为expression。即variable可以作为expression使用。

这段话的问题:
引文说A variable name in computer source code is an identifier,也就是说,在源代码中variable nameidentifier。或者说,variable name的集合是identifier的集合的子集。这里并没讲到variable和identifier的直接关系,所以我想你认为variable name是variable的组成部分。
其实这里逻辑上仍然不通——引文可没说An identifier must be a variable什么的,事实上也存在不是variable name的identifier(就C而言,如直接构成function designator的identifier,俗称function name)。不过我想应该都明白要讨论的是作为variable name的identifier,所以之后按下不提。
言归正传:
其实说白了,形式(变量名)和内容(变量或者变量的值)的关系,一哲学问题。
In computer programming, a variable is a storage location and an associated symbolic name which contains some known or unknown quantity or information, a value. The variable name is the usual way to reference the stored value; this separation of name and content allows the name to be used independently of the exact information it represents.

这里说的associated symbolic name是讨论variable概念中不可回避的一个要素,如果不讲是不完整了——这点也是反对LZ杜撰的anonymous variable的理由。引文讨论的一个显著前提是不忽略这里任何一个要素。
但是注意这里的name是associated而不是contained,和content/value的地位有着显著的不同。最重要的区别在于,变量名依赖于变量,变量不依赖于变量名。实际上,如果不考虑具体语言的限制,你可以抽象地声称存在具体的“某个变量”而不关心它的变量名(你不关心值具体是什么,不打算引用变量,只是说明这个值需要通过变量来维持存在);但要说不和任何变量关联的具体的“某个变量名”是没什么意义的(在C里面顶多就是还没被用来声明变量的标识符而已,和变量扯不上什么进一步的关系)。
接下来是最大的问题:
即便变量总是无条件地包含变量名,那又能说明什么?变量就是变量名?还是变量名就是变量?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
129 [报告]
发表于 2012-09-25 00:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
130 [报告]
发表于 2012-09-25 00:59 |只看该作者
本帖最后由 wwwsq 于 2012-09-25 01:27 编辑
pmerofc 发表于 2012-09-25 00:31
回复 124# 幻の上帝

突然想起一个问题



c的variable和object当然不是等价的。你想想为什么。



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP