如何学习一门新的语言?
1 学习的目的?解决问题。
2 如何解决问题?通过语言本身和通过和语言相关的库。
学习就是学习语言的使用以及库的使用。
我们一般都学习过一种或者几种语言,从学习语言的过程中我们自己已经摸索出了语言的特征。并且使用它来解决了一些问题。然后我们把这些问题重新提出,用新语言如何解决?这是很好的练习过程。
语言的元素:
语元(在词法分析中叫token),这个是构成语言的基本元素。在不同语言下有不同的规则。语元的种类包含关键字,标识符,符号。要知道这种语言的关键字都有哪些,标识符的构成规则(正则表达式),各种符号的意义。
语法:
语言是由语句或者表达式构成(一些函数式语言是由函数和宏构成),这些语句和表达式的结构如何呢?如何使用这些表达式呢?
举个例子:
if表达式
在 C/C++ 中
if-stmt: if exp stmts [else stmts]
如果 exp 成立则执行stmt,else 部分可以选择有或者没有
在lisp语言中
(if cond exp1 [exp2])
如果cond成立则返回exp1 如果有exp2 则返回exp2 否则返回NIL
循环
在C/C++中
while-stmt: while(exp) stmts
如果exp 成立则执行stmts直到exp不成立
而在lisp中使用 loop 宏来实现,语言本身没有提供
当你理解各个语句或者表达式语法的时候,你已经掌握了它的语义。
掌握了这些语句我们就可以解决一些通用的不涉及库的问题,也就是只能运算,而不能输入输出及访问其他设备。这些设备是由特定的操作系统提供访问提,因此那些库就是为了和操作系统或者其他的设施(比如数据库,比如XML等)交互的。
接下来就是练习:
我们要把掌握的语元和语法,把原来的问题实验一下。
1 输入不同的成绩,给出不同的评级。 >90 为[80,90) 为B [60-80)为 C
用C语言就是
if(score >= 90) return ‘A‘;
if(score >=80 && score <90) return ‘B‘;
if(score >=60 && score< 80) return ‘C‘;
用 common lisp
(if (>= score 90) ‘A‘
(if (and (>= score 80) (< score 90) ) ‘B‘
(if (and (>= score 60) (<80 score 80) ) ‘C‘)))
2 打印出9*9矩阵
C/C++
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
printf("%d ",i*j);
lisp
(loop
for i from 1 to 9
do (loop
for j from 1 to 9
do (format t "~a ")))
库的掌握:参考书,例子程序,实验