<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>海德沙龙（HeadSalon） &#187; 函数</title>
	<atom:link href="https://headsalon.org/archives/tag/%e5%87%bd%e6%95%b0/feed" rel="self" type="application/rss+xml" />
	<link>https://headsalon.org</link>
	<description>A Salon for Heads, No Sofa for Ass</description>
	<lastBuildDate>Wed, 29 May 2024 12:37:16 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>摹状调用</title>
		<link>https://headsalon.org/archives/8698.html</link>
		<comments>https://headsalon.org/archives/8698.html#comments</comments>
		<pubDate>Thu, 08 Jul 2021 08:34:47 +0000</pubDate>
		<dc:creator><![CDATA[辉格]]></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[语言]]></category>

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