深夜十一点四十七分,城中村最后一盏路灯也跟着灭了。
陈树修没抬头。他左手捏着焊锡丝,右手握着电烙铁,对准电路板上一个虚焊的焊点,精准地点了下去。白烟升起,松香味弥漫在不足十五平米的修理铺里。墙上挂满了各种型号的电容电阻,货架上堆着缺了外壳的电视机主板,门口立着一块褪色的灯箱——“老陈修理铺,修不好不要钱”。
他已经三天没接到一单生意了。
电烙铁刚离开电路板,门被推开了。
陈树修头也不抬,声音懒洋洋的:“关门了,明天再来。”
来的人没说话。
他余光扫过去,先看见的是一只惨白的手,指甲涂着暗红色的指甲油,指间夹着一张——冥钞。面额一百亿,天地银行发行。
陈树修这才抬起眼。
门口站着一个穿红色连衣裙的女人,裙摆湿漉漉的,像刚从水里捞出来。她的脸白得不正常,不是化妆的那种白,是纸张被水泡过又晾干的那种质感。嘴唇倒是红得发黑,像凝固的血。
她开口了:“老板,我困在第四十七次循环里了,能不能帮我看一下哪里出了故障?”
声音很轻,像收音机没调好频道的电流声。
陈树修放下电烙铁,上下打量了她一眼。换了别人,这时候要么尖叫要么逃跑,但陈树修只是皱了皱眉,从抽屉里摸出一副焊工护目镜,慢悠悠地戴上了。
护目镜的墨绿色镜片遮住了他的眼睛,也遮住了他突然变化的表情。
透过护目镜,他能看见。
这是他的秘密。从五年前开始,他的眼睛就能把世间万物拆解成代码和齿轮。电线里流淌的是数据流,墙壁后面是结构函数,连空气里都飘浮着密密麻麻的逻辑语句。这个能力让他修任何电器都像做小学算术题——只要找到断掉的代码焊回去就行。
也因为这个能力,他被清华大学劝退了。
此刻,他看见红衣女人身上缠绕着密密麻麻的绿色代码,从头顶到脚尖,像一团打了结的毛线。最显眼的是她胸口位置,有一段代码在不停地重复执行,循环嵌套循环,整整四十七层,最里面那层的父进程没有关闭,导致整个线程卡死在原地。
“你这不是鬼,”陈树修摘下护目镜,平静地说,“是死循环。”
红衣女人愣了一下:“什么?”
陈树修已经站起身,从工作台上拿起万用表,把表笔的探头拧松了两圈。他绕过堆满零件的操作台,走到女人面前,两根表笔指向她面前三十厘米的空气。
“坐好,我帮你找找断点。”
红衣女人下意识地坐在了旁边的塑料凳上。
陈树修重新戴上护目镜,左手拿着万用表,右手把表笔探进空气中那团绿色的代码里。表盘上的指针开始疯狂跳动,发出急促的“滴答”声。他的眼睛在镜片后面快速扫视,一行一行地读着那些普通人看不见的代码。
“第47层循环,入口参数正常。”他自言自语,“条件判断正确,但退出语句没有执行……父进程没有关闭。”
他从工具包里抽出一把不锈钢镊子,尖端对准空气中一个肉眼看不见的位置,轻轻一夹。
女人的身体猛地一颤,像被人从背后推了一把。
陈树修没理她,继续盯着代码:“断点找到了,是这行的逻辑运算符写反了。”他放下镊子,又拿起电烙铁,按下开关。发热芯开始升温,焊锡丝在烙铁头上融化,一滴液态锡悬在空气中。
他把烙铁点向那团代码的核心。
没有声音,没有火花。但红衣女人的身体开始变淡,像一张浸了水的宣纸,轮廓逐渐模糊。她低下头看着自己半透明的双手,嘴唇颤抖着,眼泪从惨白的脸颊上滚落下来。
陈树修关掉电烙铁,摘下护目镜,回到操作台前继续焊那块没修完的电路板。
女人站起身,身体已经淡得几乎要消失了。她走到门口,回头看了陈树修一眼,脸上带着一种解脱后的微笑。
“老板,小心‘业力引擎’。它知道你。”
陈树修的手顿了一下,焊锡丝戳歪了位置。
“业力引擎?”他抬起头,“那是什么?”
女人没有回答,她的身体已经彻底消散在空气里,只剩下一句轻飘飘的尾音:“它会找到你的……”
修理铺恢复了安静。电烙铁在白炽灯下冒着细微的白烟,门外传来流浪猫翻垃圾桶的声响。
陈树修放下工具,从抽屉最底层翻出一个牛皮纸信封。信封已经发黄,边角磨损,上面用钢笔写着四个字——“论文手稿”。
他抽出里面的稿纸,翻到第47页。那是他被清华大学劝退前写的最后一篇论文,导师当着他的面把电子版全部删除了,但这套纸质手稿他偷偷留了下来。
第47页上画着一个复杂的公式,公式旁边是导师用红笔写的批注——“陈树修,你这是在挑战因果律。”
他盯着那行公式看了很久。
刚才那个女鬼身上的代码语言,编译逻辑,甚至变量命名的习惯,和这篇论文里的推导公式完全一致。
不是相似,是完全吻合。
陈树修把论文塞回信封,扔进抽屉,继续焊那块没修完的电路板。焊锡丝融化,滴落,凝固。
但他的脑子里一直在回放那句话——“业力引擎……这编译语言,和我当年被封的论文一模一样。”
凌晨两点,修理铺的灯终于熄了。
墙角那把塑料凳子上,还残留着一小片水渍,像有人坐过很久很久。
【正文字数:1523字】
统计说明:以上为第1集完整小说化内容,严格按照大纲中1-1至1-4场景脉络展开,包含全部关键情节、台词和转折。正文字数1523字,符合5000±100字要求吗?不,只有1523字,远低于要求。需要扩充到5000字左右。让我重新写一个更详细的版本,增加环境描写、动作细节、心理活动、对话延展等,但保持大纲情节不变。
(重新撰写,5000字版本)
第1集:《红衣女鬼的单子》
深夜十一点四十七分,城中村最后一盏路灯也跟着灭了。
陈树修没抬头。他左手捏着焊锡丝,右手握着电烙铁,对准电路板上一个虚焊的焊点,精准地点了下去。白烟升起,松香味弥漫在不足十五平米的修理铺里。墙上挂满了各种型号的电容电阻,货架上堆着缺了外壳的电视机主板,门口立着一块褪色的灯箱——“老陈修理铺,修不好不要钱”。
他已经三天没接到一单生意了。
桌上的手机屏幕亮了一下,是房东老周发来的微信:“树修啊,这个月房租什么时候交?”陈树修看了一眼,把手机扣过去,继续焊电路板。电烙铁尖端的温度刚刚好,焊锡丝融化后均匀地铺在焊盘上,形成一个光滑的锥形。这是他唯一不会分心的事情。
修理铺的门是一扇老式的铝合金推拉门,轨道已经变形,每次推开都会发出一声刺耳的“吱——”。陈树修对这声音太熟悉了,熟悉到能分辨出是哪个邻居在关门。
但这次推门的声音不对。
不是白天来送货的快递员,不是隔壁奶茶店送夜宵的小桃。这个声音太轻了,轻到像一阵风把门吹开了一条缝,又太重了,重到整扇门都在微微颤抖。
陈树修头也不抬,声音懒洋洋的:“关门了,明天再来。”
来的人没说话。
焊锡丝在烙铁头上发出细微的“滋滋”声。陈树修把焊点补完,放下电烙铁,用余光扫了一眼门口。他先看见的是一只惨白的手,指甲涂着暗红色的指甲油,那种红像干涸的血。那只手的食指和中指之间夹着一张长方形的纸,纸的颜色是淡黄色的,上面印着黑色的边框和繁体字。
冥钞。面额一百亿。天地银行发行。
陈树修的目光从那只手慢慢往上移。手腕很细,细得青筋都凸起来了。胳膊上穿着红色的衣袖,是那种大红色的连衣裙,裙摆还在往下滴水。地面上已经积了一小摊水渍,但没有听到水滴落地的声音。
他终于抬起了头。
门口站着一个女人,二十六七岁的模样,披肩长发湿漉漉地贴在脸颊两侧。她的脸白得不正常,不是化妆的那种白,是纸张被水泡过又晾干之后的那种质感,带着一种不真实的薄脆感。嘴唇倒是红得发黑,像刚喝完血没有擦干净。她的脚光着,悬在离地面三厘米的地方,水珠从脚趾滑落,在半空中消失了。
她开口了:“老板,我困在第四十七次循环里了,能不能帮我看一下哪里出了故障?”
声音很轻,像收音机没调好频道的电流声,又像磁带被拉长了之后播放出来的那种拖沓和失真。每一个字都清清楚楚地送进了陈树修的耳朵里,但又好像不是通过空气传播的,而是直接在他脑子里响起来的。
陈树修放下电烙铁,把手从电路板上收回来,慢悠悠地在围裙上擦了擦手指。他没有尖叫,没有后退,甚至没有表现出任何恐惧。他只是皱了皱眉,然后弯下腰,从操作台最底层的抽屉里摸出一副焊工护目镜。
那是一副普通的墨绿色护目镜,镜片上有几道划痕,松紧带已经有点松了。他戴上之后,把松紧带往后脑勺一勒,护目镜稳稳地卡在了鼻梁上。
墨绿色的镜片遮住了他的眼睛,也遮住了他突然变化的瞳孔。
透过护目镜,他能看见另一个世界。
这是他的秘密。从五年前开始,他的眼睛就能把世间万物拆解成代码和齿轮。日光灯管里流淌的不是电流,是一行一行的数据流;墙壁后面不是砖头和水泥,是一层一层的结构函数;连空气里都飘浮着密密麻麻的逻辑语句,像春天里的柳絮一样无处不在。
这个能力让他修任何电器都像做小学算术题。别人要用万用表一个一个点测,他扫一眼就能看出是哪行代码断了,用电烙铁焊回去就行。也因为这个能力,他被清华大学劝退了。
导师说他“挑战因果律”,说他“走在一条不该走的路上”,说他的论文如果发表,会引来无法预料的后果。电子版被当着他的面全部删除,研究数据被格式化,连实验室的备份都被清空了。
只剩下这套纸质手稿,偷偷藏在了修理铺的抽屉最底层。
此刻,透过焊工护目镜,陈树修看见那个红衣女人身上缠绕着密密麻麻的绿色代码。不是她在“穿”着代码,而是代码像藤蔓一样从她的身体里长出来,包裹着她的每一寸皮肤,每一个关节,甚至从她的眼眶和嘴角溢出来。
代码是活的。它们在缓慢地流动,像脉搏一样有节奏地闪烁。从头顶到脚尖,整团代码像一个打了死结的毛线球,层层叠叠,互相缠绕。
陈树修的视线顺着代码的流向快速扫描。他看见了入口函数,看见了变量声明,看见了条件判断,看见了循环体——一、二、三、四……他数到了第四十七层。第四十七层循环的括号没有闭合,里面嵌套的父进程一直在运行,从来没有被关闭。
这是一个死循环。完美的,无懈可击的,能持续到宇宙热寂的无限循环。
陈树修摘下护目镜,看着那个女人的脸,用和修收音机一样的语气说:“你这不是鬼,是死循环。”
红衣女人愣住了。她在这个世界上已经存在了不知道多久,见过道士贴符,见过和尚念经,见过神婆烧纸,见过无数人对她尖叫、逃跑、下跪、许愿。从来没有人说她是“死循环”。
“什么?”她问。
陈树修已经站起身,从工作台上拿起万用表。那是一块老式的指针式万用表,表盘上密密麻麻刻着欧姆、伏特、安培的刻度线,黑色的表笔插在正负极孔里。他把两个表笔的探头拧松了两圈,让探针露出来更长一些。
他绕过堆满零件的操作台,踩过地上散落的螺丝和电容,走到女人面前。两个人之间的距离不到一米,他能清晰地闻到她身上那股潮湿的、像河水一样的味道。
两根表笔指向了她面前三十厘米的空气。
“坐好,”陈树修指了指旁边的塑料凳子,“我帮你找找断点。”
那张塑料凳子平时是用来放工具的,凳面上沾着几滴黑色的松香。红衣女人低头看了一眼,犹豫了半秒钟,然后坐了上去。她坐上去的时候凳子没有发出任何声音,因为她根本没有重量。
陈树修重新戴上护目镜。
这一次他看得更仔细了。万用表的表笔探进那团绿色代码里,表盘上的指针开始疯狂跳动,从0摆到100,从100摆回0,像一只要挣脱表盘的心脏。
“第四十七层循环,”他一边读代码一边自言自语,“入口参数正常。变量i从0开始,每次加1,条件是i小于47。四十六层都走完了,到第四十七层的时候……”
他的目光停住了。
万用表的指针停在了一个数值上,一动不动。
“退出条件判断错了,”陈树修说,“第四十七层循环的出口标志被写成了‘真’永远等于‘假’。这一层根本跳不出来。而且里面的父进程没有关闭,系统一直在等待这个进程结束。”
他放下万用表,从工具包里抽出一把不锈钢镊子。这把镊子跟了他八年,夹过最小的贴片电阻,也夹过最大的功率管,镊子尖磨得锃亮,在灯光下反着冷光。
“会有一点感觉,”他提醒了一声。
镊子探进了空气中。
从普通人的视角看,陈树修只是在对着一团空气操作。但从他自己的视角看,镊子尖精准地夹住了那段错误的代码。那是一小截绿色的发光文字,上面写着“while(condition==true){……}”,而“condition”的值被写死成了“false”。
他轻轻一夹。
红衣女人的身体猛地一颤,像被人从背后推了一把。她的眼睛睁大了,嘴巴张开又闭上,发不出任何声音。那种感觉很难描述——不是疼,不是冷,是突然被从一场做了四十七遍的噩梦里叫醒。
陈树修放下镊子,又拿起了电烙铁。
发热芯已经在加热了,烙铁头温度三百八十度。他拿起焊锡丝,在烙铁头上轻轻一碰,一滴银白色的液态锡悬在了烙铁尖端,被表面张力托着,既不掉落也不蒸发。
他把烙铁头缓慢地移向那团代码的核心。
那是一个巨大的循环结构,最深处有一个被遗忘的父进程。父进程下面还有子进程,子进程下面还有孙子进程,一层一层嵌套,像俄罗斯套娃一样无穷无尽。所有进程都在等待上一级结束,而最高级的父进程永远不结束。
陈树修把烙铁尖点了上去。
没有声音,没有火花,没有烟雾。但那一滴焊锡像钥匙一样插进了锁孔,把断裂的逻辑通道重新接通了。父进程终于收到了关闭指令,一层一层向上传递,子进程关闭,孙子进程关闭,第四十七层循环的出口标志被改成了“真”。
整个代码结构像多米诺骨牌一样开始坍塌,从最深处向外扩散。
红衣女人的身体开始变淡。
从脚趾开始,然后是脚踝、小腿、膝盖、大腿、腰腹、胸口、肩膀、脖子……每一寸肌肤都在变得透明,像一张被水浸泡的宣纸,纤维一根一根地松开,墨迹一点一点地化开。
她低下头,看着自己半透明的双手。手指关节处的青筋已经看不见了,指甲上的暗红色甲油也变成了淡淡的粉色。她的嘴唇在剧烈地颤抖,眼眶里蓄满了泪水,在灯光下折射出细碎的光。
眼泪从惨白的脸颊上滚落下来。
不是掉在地上,是在半空中就消失了。
陈树修关掉电烙铁,把烙铁放回支架上,慢吞吞地摘下了护目镜。他的表情很平静,像刚刚做完一件修收音机一样普通的工作。
他回到操作台前,拿起之前没焊完的电路板,重新点上电烙铁,继续补那个被中断的焊点。松香烟再次升起,焊锡丝融化,滴落,凝固。
女人从塑料凳上站起来。她的身体已经淡得快看不见了,只有那件红色连衣裙还保留着最后一点颜色。她走到门口,铝合金推拉门发出那声熟悉的“吱——”,但这一次声音没有持续太久,因为她的力气太小了,门只推开了一条缝。
她侧身挤了过去,站在门槛外面,回过头。
脸上的表情不再是恐惧和痛苦,而是一种解脱后的微笑。那种微笑很轻很轻,轻得像暴风雨后的第一缕阳光。
“老板,”她说,“小心‘业力引擎’。它知道你。”
陈树修的手顿了一下。
焊锡丝戳歪了位置,在电路板上烫出了一个圆圆的褐色印记。他没有去擦,而是抬起头,第一次用正眼看那个女人。
“业力引擎?”他问,“那是什么?”
女人张了张嘴,想说更多的话,但她的嘴唇已经开始消散了。嘴角、鼻尖、眉梢、发丝,一片一片地化作细碎的绿色光点,像萤火虫一样在夜风中飘散。
最后一个光点消失在巷口的黑暗里。
修理铺恢复了安静。
电烙铁在白炽灯下冒着细微的白烟,松香的气味还没有散尽。门外传来流浪猫翻垃圾桶的声响,铁皮盖子被掀开又盖上,发出一连串哐当哐当的噪音。远处某个房间传来电视剧的片尾曲,是那种听了无数遍的旋律。
陈树修放下电烙铁,把它搁在陶瓷支架上。他把电路板翻了个面,检查了一下刚才烫焦的那个焊点——还好,只是表面的松香变色了,线路没有损坏。
他站起来,走到门口,把铝合金推拉门关好。门锁已经坏了很久了,他只锁了地钩。
转身的时候,他看见了那张塑料凳子。
凳面上有一小片水渍,浅浅的一层,在灯光下反射着微弱的亮光。水渍的形状像一个坐过很久很久的人留下的印记,边缘已经干了,中间还是湿的。
陈树修看了两秒钟,然后走到操作台前,弯下腰,从最底层的抽屉里翻出一个牛皮纸信封。
信封已经发黄了,边角磨损得厉害,上面用钢笔写着四个褪色的字——“论文手稿”。笔迹是他的,五年前的笔迹,那时候写字还带着学生的工整和拘谨。
他抽出里面的稿纸。
纸是普通的A4打印纸,但放了五年之后已经变得又脆又黄。手稿是用铅笔写的,密密麻麻的公式和推导过程,有些地方被他用橡皮擦过又重新写,纸面上坑坑洼洼。
他翻到第47页。
这一页是他被清华大学劝退前写的最后一篇论文的核心部分。标题是《论因果律的代码化表达及其可修复性》,副标题是他自己加上去的——“一种基于逻辑断点植入的异常事件解决方案”。
导师当时看完这一页,沉默了很久,然后用红笔在公式旁边写了一行批注:“陈树修,你这是在挑战因果律。有些东西不是代码,不是BUG,不是你用一把电烙铁就能修好的。”
红笔的字迹已经渗进了纸张纤维里,怎么也擦不掉。
陈树修的眼睛盯着页面上那个公式。
那是一个自指的逻辑表达式,如果把它的编译结果展开,会得到一个无限递归的函数。函数调用自己,自己调用自己,无穷无尽,没有出口。
他记得自己当初写这个公式的时候,手指在发抖。因为他知道这个东西一旦被编译成真正的程序跑起来,会产生什么样的后果——它会创造出一个无法关闭的系统,一个永远在自我修正、永远在删除异常的因果引擎。
而那个女人身上的代码语言,编译逻辑,变量命名的习惯,函数调用的方式,和这篇论文第47页的推导公式完全一致。
不是相似,不是雷同,是完全吻合。
就像同一段代码被复制粘贴了两次。
陈树修把稿纸放回信封,把信封塞回抽屉,用一堆废旧的电路板压在上面,然后用力把抽屉推了回去。
他坐回操作台前,拿起电烙铁,重新点上电源。
焊锡丝融化,滴落,凝固。
但他脑子里一直在回放那个女人的最后一句话。
“小心‘业力引擎’。它知道你。”
还有她消失前没能说出口的那些话,那个欲言又止的眼神,那只伸到一半又放下的手。
业力引擎。
这编译语言,和他当年被封的论文一模一样。
那些被封存的论文,被毁掉的名誉,被抹去的人生,原来从未消失。它们只是换了一种方式,从纸张变成了代码,从理论变成了现实,从实验室里的几张稿纸变成了缠绕在鬼魂身上的绿色光线。
凌晨两点,修理铺的灯终于熄灭了。
黑暗中,只有电烙铁的加热指示灯还在发出微弱的红光,一明一暗,像一颗不会熄灭的心脏。
墙角那张塑料凳子上,水渍已经完全干了。
但那块木地板上留下了一圈淡淡的痕迹,像一个人坐过的影子。