陈凯
摘要:博尔赫斯的小说中常常会出现迷宫,一方面,迷宫是叙事的对象,另一方面,叙事本身也是构造文本迷宫的过程,博尔赫斯的迷宫的叙事或者叙事的迷宫体现出一种用有限的文字来表达“无限”的企图。这给作者带来了双重启发,他认为,一方面,可以用功能有限的列表实现超出列表日常功用范围的复杂计算,另一方面,尽管教学活动常由日常生活情境引入,但思维中的创造力却需要对日常工具采用一种非日常认识模式的观照的方法,从而显现出物的本质和变化潜力,来保证创造思维的自由。
关键词:迷宫;博尔赫斯;观照;计算机体系结构
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2024)01-0020-05
博尔赫斯说,“世界本来就是迷宫,没有必要再造一座”,但博尔赫斯自己“建造”了很多迷宫,如《小径分岔的花园》《环形废墟》《阿莱夫》《阿斯特里昂的家》等。博尔赫斯笔下的迷宫是多样的,“不仅有真正实体的迷宫,还有宫殿、沙漠、花园、庭院、图书馆、镜子、城市、世界,除了这些现实事物,博尔赫斯更倾向于把一些象征事物当作迷宫,如小说、书籍、语言、时间、梦、直线、圆、叙事”。[1]有些迷宫往往不是单纯空间上的迷宫,而是结合复杂的时空结构来构筑的,也就是当今的人们由科幻艺术熟知的平行世界、穿越时空等,甚至有类似于《盗梦空间》的多层嵌套,但博尔赫斯的故事带给读者的感觉却不是科幻,而更像是梦境。博尔赫斯用文字来书写迷宫,但书写迷宫的诸多文字本身也是一个等待读者寻找出路的迷宫,故事中的信息是多样、分散又互相在暗中关联的,有人认为其中具有一种“超文本系统”的结构。[2]“博尔赫斯是那种作家, 从一个单独的原理开始,起初只是观念,接着将他的故事作为抽象事物的化身或者替身进行构思”。[3]博尔赫斯故事中的观念常常是“无限”的,而熟知计算机算法的读者,又会发现这种用有限的文字来表达“无限”的企图,是用和计算机科学中的循环结构、多叉树、递归调用、仿真等相类似的方法达成的。博尔赫斯“建造”迷宫的过程,也是将自身所处的这个世界本身作为在迷宫寻找路径的过程,其大致方法是,尝试着用简单却无限重复的方式来表现某种复杂而不能尽述的事情,这可以勉强用两面镜子对照后形成层叠的幻像来比喻,但应该比这个还要复杂,这种复杂的幻像应当是可略微把握但又难以完全预测的,科学上的术语应当称之为“混沌”。
某个初学程序语言的人在将简单的分支结构语句、循环结构语句、列表、变量等结合起来编写成一个具有某种功能的程序代码时,那么他就在一个思维的迷宫中寻找到了恰当的路径(对初学者而言大概是颇费脑力的),但对他来说,却不容易发现这个迷宫的构筑者所面对的谜题,那就是如何由简单的规则达成一种复杂。如果一个计算装置的行为是可预测的,如打印一个星、两个星、四个星、八个星等,那么它的能力是有限的;如果一个计算装置的行为是完全不可预测的,那么它是混乱且无用的。一个功能强大的计算装置应当如庄子所说的符合“无用之用”的特性,“无用之用意味有什么东西在另一层次上,它就像能容大物的冥海,深不可测,那里聚集了物的本质和意义……提供了另一种尺度和感受方式……打乱日常的思路安排的可靠性”。[4]在日常教学中,教师指导学生编写程序在列表中进行枚举,这是用;教师指导学生编写程序在列表中进行查找,这也是用;教师指导学生在列表中排序,这当然还是用。沉浸于各种现成的“用”之中,就难免要生出如哲学家所说的人的异化的那种担忧,而思维中的创造力也可能在异化中被局限了。尼采说:“你必须是一片混沌,才能产生出跳跃的星辰。”我们需要反思为什么算法的初学者眼中没有跳跃的星辰,因为他们看到的都是一个又一个现成的精美的器物,而不是一个混沌的迷宫。身处迷宫中的人,更可能会停下来仰望星空,让眼中映射跳跃的星辰。
对列表的观照
对于教师来说,初学者的思维空间是值得珍视的,因为他们思维空间中初始的想象是不受具体功用约束的,而某个已学习了列表或数组的初学者,其想象很可能就已经受到了某种影响——往好里说是能借助思维习惯举一反三,往坏里说就是被固化了思维方式。考虑这样的想象任务:假想你自己是某种装置,现在你面对着的某个使用者,试图向你存放一系列的数据并希望将来能方便地取出其中特定的部分数据,那么你作为一个装置,应当如何运作。这个问题的回答可能有很多种,如一种回答是:“我是由很多字节组成的,数据以二进制的形式依次存放到字节中。”虽然没有充分考虑获取特定数据的便捷性,这个回答仍然是值得赞赏的,因为这个回答充分运用了已学的知识——二进制以及计算机的存储单位。从这个回答中可以引出更具有实用性的方案,如我可以将若干个字节捆绑成一个存储空间(常有学生用抽屉或柜子加以比喻),为这些空间编制特定的序号(当然这又引出了如何规定每个空间存储容量的问题)。在这里,使用序号从一个线性表中获取特定数据,当然不是数据存取唯一的方法,问题是,教师到底是应该将形形色色的数据结构抛置给学生,还是希望让学生先试着想象出它们的存在。
在大部分教学设计中,当借助枚举算法操作列表时,给人这样的感觉:列表是一个现成的工具,但从本质上說,这样就颠倒了因果,这里有一个不应该忘记的事实,其实是人们希望存在一个具有如列表般行为的数据结构(或虚拟装置),这种希望基于一种意向中的目标。某个契合生活情境的目标,常常让人联想到某个已在手上或近在身边的工具,而某个远离生活情境的目标,则更有可能将工具从原本预设的功用中解放出来。例如,正是因为阿兰·图灵思考人的思维过程何以可行,才会构思出基于纸带和读写头的图灵机;正是因为冯·诺依曼思考人造生命,才会构思出元胞自动机。要想激发学生思维的碰撞和成长,就要避免将算法和程序语言仅仅视作某种解决生活实际问题的工具,而是要提供某种更遥远的意向目标。也许,对大部分人来说,解开生命和思维的秘密这个目标可能过于虚无缥缈,但可以试着去解开或构筑一个作为游戏的迷宫。游戏是一个暂且指向自身而不指向外在功用的事物,但它又具有延展融入社会实际功用的潜力,关于在教学中构建游戏情境,是另一个等待展开的大问题。
本文试着带领读者去探索一个迷宫(但也要警惕,若是单纯跟随迷宫导游的视角,这种探索就失去了重要意义),迷宫开始于对一个极为普通的列表的“观照”,也就是通过剥离列表的日常功用而将其置于“无用”的境地,通过“技术的艺术化”或如庄子化蝶一般的“物化”(注意这里所说的并非卢卡奇所说的物化)来保证思维的自由[5],试着重新去发掘列表的大用。注意,这种“观照”不是王阳明的“亭前格竹”,“亭前格竹”失败的一个重要原因是在意向目标缺失的前提下观察对象的静态化,“格竹活动仅由直观与玄思构成。起于静态的感性直观。直观不足,继之以主观玄思。思之无果,最后只好歇手作罢”。[6]邵雍的话是对“亭前格竹”失败的另一种诠释:“天所以谓之观物者,非以目观之也。非观之以目而观之以心也,非观之于心而观之于理。”这里自然要追问“理”从何来,邵雍的解释是要从“以物观物”中来,“以物观物”的目的是要“非对象化之观……不在日常认识模式的主客关系上去观”[7],从而显现出物的本性。一个被观照中的列表,它将从枚举、查找、排序等日常认识模式的功能中解脱出来,它可以成为一个数据的隧道、弹射机、跑马灯……乃至某个游戏的场景、某个花园、某个迷宫。
列表迷宫——在简单中实现复杂
中国的古典园林往往具有迷宫式的趣味[8],博尔赫斯的《小径分岔的花园》里提到了一座花园,同时这座花园是一个迷宫。让人惊讶的是,没有到过中国的博尔赫斯能够将迷宫和整座花园联想在一起,而不是如西方园林那样在园中独辟出一个树篱迷宫。这启发了笔者去构筑一个列表的花园,同时也是一个列表的迷宫,这个迷宫如上页图1所示。考虑某人身处迷宫的入口,也就是列表0号元素的“门洞”,此人顺路前行——行进过程用列表索引值i的自增来模拟,但岔路后的数字将此人带离预定路径跳转到另一个指定的位置(除了岔路,其他建筑后的数字并没有实际功能,而只是使存储空间的容量一致),这样,只用一维的线性数据就能表达出二维平面的分岔效果,或者说,产生出一种超文本的效果。
在如上页图2所示的花园中,游览者不幸地被困于永远的循环路径之中,但如果所有的岔路都是一分为二的,一旦探索过其中一条分岔,下一次就选择其中另一条,于是,走过的岔路就演化为一条普通的小路,这样,游览者虽然在花园中绕圈,但最终能到达出口。
假设交予游客两把钥匙,探寻迷宫的行为就变得更加复杂了。数字0代表能打开岔路上的直线路径的门,数字1代表能打开岔路上的分支路径的门,于是,不同的钥匙,将游客引导至不同的景点:[0,0]到达水榭,[0,1]到达假山,[1,0]到达凉亭,[1,1]到达花架。游客的游览过程,其实模拟了二进制数的解码过程。程序代码如上页图3所示。展现这个例子主要是想说明,利用简单的规则可以涌现出复杂的行为。在这个例子中,游客、钥匙、岔路、景点的互动仍然是不充分的,不妨想象这样的场景,特定的景点能改变特定的钥匙的状态,特定的钥匙能改变特定岔路的状态,那么情况就会变得极其复杂,而正是因为这种复杂,使得一个简单的列表也能拥有强大的计算能力。
列表迷宫计算机
图4是一个列表的迷宫,这个迷宫自身就是一个可编程的计算机,并且只有20多行代码。这个列表是可编程的,这并不是说,可以通过修改Python代码来操作列表,而是说,在图4所示的代码中,除了第一行“L=[……]”,其他语句都不需要做任何变动,就可以用列表L本身来进行编程,从而实现不同的功能。
图4所示的列表仅有16个元素,可以根据其实际功能,向其中增添更多的元素。这个列表迷宫的工作过程是这样的:将列表元素看作迷宫中的房间,探索者带着写着0的纸和笔首先进入0号房间,并且总是按“选路”“取数”“加数”“存数”的步骤,根据房间里的数字前往指定房间进行操作,然后回到原来的房间,然后进入右面的下一个房间。具体操作步骤如下:
选路——如果纸上的数字小于指定房间的数字,则前往指定房间的右侧房间,否则回到原来房间并进入右面的下一房间;
取数——前往指定房间将这个房间的数字抄写在纸上,然后回到原来房间并进入右面的下一房间;
加数——前往指定房间将这个房间的数字加上自己纸上的数字,将结果写在纸上并擦除纸上原有数字,然后回到原来房间并进入右面的下一房间;
存数——前往指定房间将纸上的数字抄在房间里,并擦除房间里原有数字,然后回到原来房间并进入右面的下一房间,如房间里数字是99,则是迷宫的出口。
以图4列表迷宫的工作过程为例:
①前往02号房间选路,因默认数字0小于99,前往03号房间;
②前往09号房间取数,得到01,回到03号房间,进入04号房间;
③前往10号房间加数,01+00得到01,写在纸上,回到04号房间,进入05号房间;
④前往10号房间存数,将01抄写在房间里,回到05号房间,进入06号房间;
⑤进入11号房间选路(开始新一轮的“选路”“取数”“加数”“存数”),因纸上的01小于06,则进入12号房间……以上过程,实际上做的是对前5项自然数进行累加。
麻雀虽小,五脏俱全。计算机系统中的存储器、控制器、运算器的思想以及机器语言中的操作码和操作数,都能通过这个列表迷宫计算机体现出来。这也是一种将算法教学和计算机系统结构教学作关联的方法。
探索迷宫和构造迷宫
博尔赫斯关于迷宫的小说,既可以认为是关于迷宫的叙事,也可以认为是一种叙事的迷宫[9],而本文则有着类似的企图:告知读者如何构造一个迷宫,虽然也的确是目的之一,但这其实并非最重要的,更重要的东西隐藏在所展现的列表迷宫背后,那里有着很多个各式各样的迷宫,它们的工作方式和工作目的各不相同,其丰富的多样性是难以在日常生活中找到相匹配的情境的。“迷宫”这个词具有强烈的抽象特征,它从简单中涌现出复杂,达成一种趋向于无限的比喻。迷宫赋予日常事物以一种非日常的安排,在迷宫中穿行,总是因为遇见熟悉和反复出现的东西而让人困惑,日常生活和工作常常如一个没有出口也缺乏新鲜感的迷宫,但只要换成迷宫构筑者的视角,一切又变得如此丰富和有趣。
参考文献:
[1]白杨.博尔赫斯:无限重写与迷宫叙事[J].阅读与写作,2010(04):6-8.
[2]李洁.博尔赫斯的“超文本”意识——《交叉小径的花园》与“超文本”概念的對照[J].赤峰学院学报:汉文哲学社会科学版,2009,30(10):105-106.
[3]格里莫·马丁内斯,周止琉.博尔赫斯与数学[J].叙事:中国版,2013:155-169.
[4]高利民.庄子无用之用的另一种解读[J].复旦学报:社会科学版,2005,47(04):105-112.
[5]马周周.庄子教育技术哲学诠释[J].电化教育研究,2010,31(09):44-48+63.
[6]薛富兴.阳明格竹:中国古代认识论史上的一桩公案[J].社会科学,2015(02):116-126.
[7]崔基勋.论“非对象化”之观的涵义——以老子与邵雍的“以物观物”为例[J].上饶师范学院学报,2020,40(05):36-42.
[8]张谦.江南园林中的迷宫趣味性[J].中国建筑装饰装修,2022(13):106-108.
[9]张晔.试论后现代小说的“迷宫”特质——以《小径分岔的花园》和《哈扎尔辞典》为例[J].常州大学学报:社会科学版,2013,14(02):76-79.