摹状调用

【2021-07-08】

@tertio: 好久不编程了,这几天用python编了几个命令行程序做点课程文件的自动处理,省了一堆手动操作。python的工具箱的确全,写起来省事。顺便想起来一个例子,可以用来展示一种乾坤颠倒的编程方式,例子虽然非常小,但说明这个概念足够了。

假如我想调用一个函数,这个函数的作用是“计算一个列表的长度”,但是我不知道在哪个库里,也不知道叫啥名字,但是我可以定义它的功能:

LengthOfList([])->0
LengthOfList([a,b,c])->3
LengthOfList([1,34,8,9,0])->5

也就是说,我定义了一个名字,然后定义了它的输入-输出测试,然后系统通过一番测试,发现有这么个函数,可以实现这样的输入-输出,于是就给定位了。

然后呢?然后我就去用它了,而且按自己给的名字去用,而不是按它本来的名字,还有一种可能,这个函数并不存在,是系统自己凑出来的(至于凑的能力,一开始肯定很弱)

这里最有趣的一点就是,如果定位的是已经存在的库函数,而系统升级到某个版本之后,把库函数名字改掉了。那么我这段代码还能用吗?

居然还能用,因为定位的这个函数是系统自己测试出来的,而不是直接按名字匹配。

这种解耦已经非常彻底了。

如果系统升级到某个版本,库函数功能发生了变化,导致输入-输出不成立了,那么这段代码还能用吗?

还是能用。

因为系统是按输入-输出的功能去定位的,满足功能的才能定位,如果实在找不到,就是给出一个失败的结果。

有人也许说,有限的输入输出对,对功能的定义不完备,有可能出错。

这不是问题,编程的任何环节都可能出错,这种错误并不显得更突出。

@whigzhou: 我说不出为什么,但我的直觉是,这种方法会陷入类似于当年单层神经元网络曾陷入的困境

@whigzhou: 略微复杂一点的映射关系,恐怕都无法用少数几个输入输出对来表示

@whigzhou: 或许可以通过一组行为特征来表示某种模式,但那不是输入输出对

@whigzhou: 依我看,要实现这种解耦,不如把函数调用改为消息交换,想调用某个功能的地方,直接朝系统喊一声:我需要如此这般的帮助,谁来帮我啊

@tertio:最复杂的就是直接给出整个程序的需求,当然做不到,退而求其次,可以分解为更加简单的模块,降低复杂性,直到能猜出来为止。

@whigzhou: 你的思路,以我理解,其实就是想用摹状词代替专名来指称一种映射关系,但摹状的摹法有很多,输入输出对并不是好摹法

 

相关文章

标签: |
8698
【2021-07-08】 @tertio: 好久不编程了,这几天用python编了几个命令行程序做点课程文件的自动处理,省了一堆手动操作。python的工具箱的确全,写起来省事。顺便想起来一个例子,可以用来展示一种乾坤颠倒的编程方式,例子虽然非常小,但说明这个概念足够了。 假如我想调用一个函数,这个函数的作用是“计算一个列表的长度”,但是我不知道在哪个库里,也不知道叫啥名字,但是我可以定义它的功能: LengthOfList([])->0 LengthOfList([a,b,c])->3 LengthOfList([1,34,8,9,0])->5 也就是说,我定义了一个名字,然后定义了它的输入-输出测试,然后系统通过一番测试,发现有这么个函数,可以实现这样的输入-输出,于是就给定位了。 然后呢?然后我就去用它了,而且按自己给的名字去用,而不是按它本来的名字,还有一种可能,这个函数并不存在,是系统自己凑出来的(至于凑的能力,一开始肯定很弱) 这里最有趣的一点就是,如果定位的是已经存在的库函数,而系统升级到某个版本之后,把库函数名字改掉了。那么我这段代码还能用吗? 居然还能用,因为定位的这个函数是系统自己测试出来的,而不是直接按名字匹配。 这种解耦已经非常彻底了。 如果系统升级到某个版本,库函数功能发生了变化,导致输入-输出不成立了,那么这段代码还能用吗? 还是能用。 因为系统是按输入-输出的功能去定位的,满足功能的才能定位,如果实在找不到,就是给出一个失败的结果。 有人也许说,有限的输入输出对,对功能的定义不完备,有可能出错。 这不是问题,编程的任何环节都可能出错,这种错误并不显得更突出。 @whigzhou: 我说不出为什么,但我的直觉是,这种方法会陷入类似于当年单层神经元网络曾陷入的困境 @whigzhou: 略微复杂一点的映射关系,恐怕都无法用少数几个输入输出对来表示 @whigzhou: 或许可以通过一组行为特征来表示某种模式,但那不是输入输出对 @whigzhou: 依我看,要实现这种解耦,不如把函数调用改为消息交换,想调用某个功能的地方,直接朝系统喊一声:我需要如此这般的帮助,谁来帮我啊 @tertio:最复杂的就是直接给出整个程序的需求,当然做不到,退而求其次,可以分解为更加简单的模块,降低复杂性,直到能猜出来为止。 @whigzhou: 你的思路,以我理解,其实就是想用摹状词代替专名来指称一种映射关系,但摹状的摹法有很多,输入输出对并不是好摹法  


暂无评论

发表评论