1.文科人员需要编程语言 随着计算机的普及和计算机科学的发展,不仅计算机成为其他学科不可缺少的工具,而且计算机科学也促进了其他学科的发展。文科也不例外。计算机不但为语言学、文学等传统上与数理不太相干的文科提供了现代化工具,而且计算机科学的思想、方法等也为这些传统的文科注入新的活力,使这些学科有了长足的发展,甚至产生了文理结合的新学科,如计算语言学。 文科人员在工作、研究中越来越多地使用计算机。计算机不只是计算或编辑、打印文章的机器。它的最高价值在于对数据进行各种需要的处理。要处理就要有进行处理的程序和软件。虽然市场上有很多应用软件,但是用计算机要做的各种处理任务是无限的,而市场上现成的软件总是有限的,不可能完全满足每一个人、每一项具体处理工作的需要。所以,为更好地发挥计算机的潜力做好自己的工作,文科人员应该掌握程序语言,编制自己工作中需要的程序。 目前,多数文科人员还不能使用程序语言编程。这并不是说文科人员不需要编程语言,而主要是由两个方面的矛盾造成的。一方面,我国的文科人员,一般只在高中学习初等的数理知识,进入高一级学校后,不再学习数理方面的课程,这使得广大文科人员的知识结构与学习计算机及程序语言所要求的有不少差距,因而很多人对程序语言的学习望而却步。另一方面,目前我国流行的主要计算机程序语言是Basic、C/C++、Java等,这些是计算机专业人员使用的程序语言,非计算机专业的理科人员掌握起来常常都有困难,对文科人员来说,更是难上加难。而且,这些语言,或者是主要用于数字运算的工具,或者是系统开发的工具,虽然功能强大,但并不特别适合文科人员工作的需要。如何解决这些矛盾呢?从长远来看,应该从教育体制方面根本改变文科人员知识结构不合理的状况,但目前还很难做到,而且远水不解近渴。从目前来看,寻找一种适合于文科人员学习、使用的计算机程序语言,是理想的解决办法。有没有这样的程序语言呢?有!这就是ICON语言。 2.ICON语言是适合文科人员使用的编程语言 2.1 ICON是以字符串和结构处理为特色的语言 ICON语言(下面简称ICON),是美国亚利桑纳(Airzona)大学计算机科学系以Ralph E.Griswold教授为首的研究组研究、开发的一种高水平的通用计算机程序语言,(注:在计算机术语中,ICON的意思是可视界面上的“图标”,但作为语言名称的ICON与图标无关。)它与Basic、C/C++等其他高水平计算机语言一样,可以在多种机型和操作系统上运行,如,Unix、MSDOS、OS/2、Machintoshi等,并且有了可以在WINDOWS上运行的版本。在语言的句法结构上,ICON与C语言类似,采用过程化的结构,源程序编译成为可执行文件后在操作系统上运行。 ICON是以字符串和结构处理为特色的程序语言。其他程序语言虽然也有字符串处理的功能,但它们只是把字符串作为长度有限的字符数组,靠低水平的字符数组操作来完成,因而处理能力有限,而且使用极为不便。ICON的设计者把字符构成的串和结构的处理及处理的便利、高效作为突出的考虑,因而ICON在字符串处理上具有其他语言所没有的鲜明特色。 ICON是设计思想独特的程序语言。传统的程序语言,为了提高运行的速度,多采取用语言模仿计算机硬件的方法。结果,提高了速度,牺牲了编程的便利。ICON的设计者采用符合人们思维和解决问题方式的方法来实现语言的功能,让机器尽量替人做事而不是人为机器操心。因而,ICON编程便利,程序简短。(注:意思引自ICON设计者Griswold教授为笔者《ICON语言教程》(清华大学出版社出版)写的序言。) 2.2 ICON适合文科人员的需要 包括语言学、文字学等在内的文科人员工作的主要对象是语言,离不开对语言信息的分析、检索、处理。在现代语言学来看,语言的成分或片段,如词、句子、篇章等,都是由字符表中的符号构成的有一定结构的串,一般称为“字符串”。在计算机处理中,这些片段同样作为字符串来处理。文科人员在工作中使用计算机,必然要与字符串打交道,少不了对字符串和结构的分析和处理。ICON正是以字符串和结构处理的特色适合文科人员的需要。这体现在以下方面: 1.强有力的字符串扫描功能 为了对字符串和结构进行有效的处理,ICON提供了有力的工具——字符串扫描。例如,只用三个程序行可以把输入文件里的所有汉字找出来并加以统计, while line:=read(file in)do line?while tab(upto(&cset[161:256]))do table[move(2)]+:=1 其中,“?”是专门进行字符串扫描的算子(运算指令),找到的字及统计结果由索引表table保存。完成同样的任务,用其他程序语言,至少要用十几甚至二十几个程序行或语句。稍加修改,这三行就可以完成对中文词语的统计。 在字符串扫描的基础上,可以对字符串和结构进行任何分析或处理。例如, while line:=read(file_in)do line? if match(“学习”|“掌握”)||arb()||match(“方法”|“理论”) then write(line)