五千年(敝帚自珍)

主题:【原创】庖丁解字之 追亡逐北 : 汉字发展史上的函数重载 -- 丁坎

共:💬17 🌺24
全看分页树展 · 主题
家园 【原创】庖丁解字之 追亡逐北 : 汉字发展史上的函数重载

追逐二字,现在没有什么意义上的分别。

这种意义上的无差别状态最晚在贾谊那时就形成了。

读过《过秦论》的朋友多半对

追亡逐北,伏尸百万
的描写有深刻印象。此处北即败北,亡即逃跑,都是指人无疑。

许慎先生在说文中这样解释:

追,逐也。从辵𠂤聲。陟隹切

逐,追也,从辵,从豚省。

以两字互训,可见他也认为二者没有意义区别。

当然这不能怪他,他生活的时代离汉字起源的时代已经有相当距离,没有接触到早期的文字运用资料。殷墟甲骨文字出土后,文字学家们接触到了原始的文字资料,拥有了比许慎更好的研究条件,所以能看到他看不到的东西。当然,正如机会只属于有准备的头脑,资料也只属于有洞察力的慧眼。杨树达先生就是个独具慧眼的人,他能从追逐二字的甲文字形

点看全图

外链图片需谨慎,可能会被源头改

点看全图

外链图片需谨慎,可能会被源头改

中判断出,逐专用于豕,而追专用于師的左部,即师,师即众也,如兴师动众。(这个有更详细的解释,此处略去。)

也就是说,追是用于人类的,而逐是用于动物的。

这个判断,通检甲骨卜辞,无一不合,凡是追人都是用的追字,而凡是追动物,不管是猪,马还是鹿都用的逐字。

杨树达先生的发现得到了学界交口称赞,被誉为创获,定论。

追逐二字由泾渭分明到合二为一所经历的历程,用程序语言的眼光来看,就是一个函数重载。

什么是程序语言中的函数重载呢?

函数的输入值,即变量,具有不同类型,比如说

int 整型, float 浮点型等等。

我们举最简单的例子,比如说要求一个数的平方。

在早期的程序语言里,这需要:

写一个函数 square_int(), 来接受整型变量作输入值。

再写一个函数 square_float(), 来接受浮点型变量作输入值。

但是这样对用户很不方便,当他们想求一个数的平方时,必须首先分辨这个数的类型,而这种分辨对于要用户要实现的功能又没有什么意义,对用户来说纯粹是多此一举。

他们的愿望就是一个简单的函数square(), 既可以接受整型变量,也可以接受浮点型变量。

这个愿望被后来的程序语言研究者给予了满足,他们把分辨类型的工作从用户那里转移给了

编译器,用户可以把不同类型的变量输入同一个函数,而编译器确定类型后再执行相应的操作,这就是函数重载(overload)。

用这种眼光来看,追逐二字原本是两个函数:

追:

void 追 (人 A)

{

while(自己与A的距离不为零)

{

沿自己与A的连线向着A奔跑;

}

}

逐:

void 逐 (动物 A)

{

while(自己与A的距离不为零)

{

沿自己与A的连线向着A奔跑;

}

}

这跟那两个平方函数一样很累赘---追谁还不是追,还不是以目测和奔跑为实现手段,所以啊,人们用着用着就搞出了函数重载,

追,逐,追逐都可以不加区别地接受动物和人类两种类型的变量。

再解释两句:

我们在说话,写文章的时候,相当于用户。

而在听人说话,读文章的时候类似于编译器---别人的话和语言就象程序一样在我们的脑海里复现。

本来是当讲话者想说追或逐的时候,要首先判断对象是人还是动物,根据对象选择用追字还是逐字。而听

话者一听追还是逐,不等后面的字出来,就已经明白了对象是人还是动物。此处分辨的负担在说话者。

函数重载后,

当你想说追或逐的时候,不在需要分辨对象类型,而把分辨的负担留给了听讲者---此时他不能再根据追或者逐来判断对象,而必须竖起耳朵听下文。

全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河