主题:【原创】庖丁解字之 追亡逐北 : 汉字发展史上的函数重载 -- 丁坎
追逐二字,现在没有什么意义上的分别。
这种意义上的无差别状态最晚在贾谊那时就形成了。
读过《过秦论》的朋友多半对
许慎先生在说文中这样解释:
以两字互训,可见他也认为二者没有意义区别。
当然这不能怪他,他生活的时代离汉字起源的时代已经有相当距离,没有接触到早期的文字运用资料。殷墟甲骨文字出土后,文字学家们接触到了原始的文字资料,拥有了比许慎更好的研究条件,所以能看到他看不到的东西。当然,正如机会只属于有准备的头脑,资料也只属于有洞察力的慧眼。杨树达先生就是个独具慧眼的人,他能从追逐二字的甲文字形
中判断出,逐专用于豕,而追专用于師的左部,即师,师即众也,如兴师动众。(这个有更详细的解释,此处略去。)
也就是说,追是用于人类的,而逐是用于动物的。
这个判断,通检甲骨卜辞,无一不合,凡是追人都是用的追字,而凡是追动物,不管是猪,马还是鹿都用的逐字。
杨树达先生的发现得到了学界交口称赞,被誉为创获,定论。
追逐二字由泾渭分明到合二为一所经历的历程,用程序语言的眼光来看,就是一个函数重载。
什么是程序语言中的函数重载呢?
函数的输入值,即变量,具有不同类型,比如说
int 整型, float 浮点型等等。
我们举最简单的例子,比如说要求一个数的平方。
在早期的程序语言里,这需要:
写一个函数 square_int(), 来接受整型变量作输入值。
再写一个函数 square_float(), 来接受浮点型变量作输入值。
但是这样对用户很不方便,当他们想求一个数的平方时,必须首先分辨这个数的类型,而这种分辨对于要用户要实现的功能又没有什么意义,对用户来说纯粹是多此一举。
他们的愿望就是一个简单的函数square(), 既可以接受整型变量,也可以接受浮点型变量。
这个愿望被后来的程序语言研究者给予了满足,他们把分辨类型的工作从用户那里转移给了
编译器,用户可以把不同类型的变量输入同一个函数,而编译器确定类型后再执行相应的操作,这就是函数重载(overload)。
用这种眼光来看,追逐二字原本是两个函数:
追:
void 追 (人 A)
{
while(自己与A的距离不为零)
{
沿自己与A的连线向着A奔跑;
}
}
逐:
void 逐 (动物 A)
{
while(自己与A的距离不为零)
{
沿自己与A的连线向着A奔跑;
}
}
这跟那两个平方函数一样很累赘---追谁还不是追,还不是以目测和奔跑为实现手段,所以啊,人们用着用着就搞出了函数重载,
追,逐,追逐都可以不加区别地接受动物和人类两种类型的变量。
再解释两句:
我们在说话,写文章的时候,相当于用户。
而在听人说话,读文章的时候类似于编译器---别人的话和语言就象程序一样在我们的脑海里复现。
本来是当讲话者想说追或逐的时候,要首先判断对象是人还是动物,根据对象选择用追字还是逐字。而听
话者一听追还是逐,不等后面的字出来,就已经明白了对象是人还是动物。此处分辨的负担在说话者。
函数重载后,
当你想说追或逐的时候,不在需要分辨对象类型,而把分辨的负担留给了听讲者---此时他不能再根据追或者逐来判断对象,而必须竖起耳朵听下文。
- 相关回复 上下关系8
🙂【原创】庖丁解字之 追亡逐北 : 汉字发展史上的函数重载
🙂顶上去 丁坎 字0 2008-09-03 11:59:20
🙂函数重载完成的时间 1 丁坎 字559 2008-07-20 01:25:56
🙂逐是略偏贬义的,追基本是中性的 任爱杰 字122 2008-07-20 09:52:27
🙂这已经是另一个问题了 丁坎 字216 2008-07-20 10:42:24
🙂夸父逐日,日已经不是动物了。追非人类都用逐? shepherd 字0 2008-07-19 23:28:33
😄这个?猪能代表所有的动物? 任爱杰 字460 2008-07-19 22:37:15
🙂也稍微解释一下 丁坎 字212 2008-07-20 01:36:51