共计 3 篇文章

表面的简洁

本文刊发在《程序员》杂志09年第二期上。是讨论函数式语言基本性质和发展方向的一篇文章。 一、把大象装进冰箱 在命令式语言(当然我们可以确指为C、Delphi、Java或C#等等)中,初学者的第一个疑难便是这样的代码(注1): X=X+1 为什么?因为在数学概念中,上述等式是不能成立的。这种表达式是计算机的思维逻辑:当它运算上述表达式(或语句)时,X被作为暂存单元——例如冰箱。 ...

从表达式到函数:表面的简洁

scheme/lisp中,(基于运算元、运算符的)表达式运算是一个语法基础,但它们被称为函数式语言而非表达式语言。那么,它们是如何解释函数式语言的呢? 一个lisp的函数在语法上应当书写为如下格式: ((lambda (p1...pn) _e_) a1...an) 这是什么意思呢?其实,这其中的p1..pn为形式参数,而a1..an为实际参数,而lambda则是一个从天上掉下来的概念,它被用来作为一个函数标识符的命名——就好象四则运算中的x,y,z只是命名一样。 ...

从表达式到变量:一行scheme代码之所见

下面这行代码在scheme中是可以执行的,其结果值为12: ((if #f + *) 3 4) 在scheme中,一对括号表明过程调用。括号中的第一个参数是过程名,其余的则是过程参数。 那么,我们先看内层括号中的代码: (if #f + *) if是一个过程名,而不是语句。该过程相当于JavaScript或C中的三元表达式,或者其它语言中的一个if语句(的效果)。试以javascript来描述它的效果(以下语句中的字符串定义,只是语义上的含义,并不表明它是字符串): var q = '# ...