跳转到内容

枫叶/用枫叶编程

来自维基教科书,开放世界中的开放书籍

枫叶既是一种编程语言,也是一种数学系统。

枫叶作为一种编程语言,具有面向对象语言的几个共同属性。特别地,变量和过程参数可以包含任何有效的枫叶对象。原则上,枫叶没有声明,它由函数和用户来执行类型限制。

枫叶是一种过程式编程语言。它还包含许多函数式编程结构。枫叶是一种动态类型、解释型语言。即不像 C 和 Pascal 那样是强类型语言。不需要声明。

所有枫叶程序都是函数,因为它们被赋予作为参数的值或对象的名称,并返回一个值作为结果。

在枫叶中,函数可以像数字或表达式一样被分配给变量。

枫叶函数定义的一种形式是将一个编程变量分配给一个proc表达式。

枫叶程序中的每个变量要么是形式参数、局部变量,要么是全局变量。

只有两种可能性:要么一个变量是它立即出现的那个程序的局部变量,要么它是整个枫叶会话的全局变量。局部变量仅是它们自己的程序的局部变量。它们在其他程序中是未知的,即使是在定义它们的程序中出现的程序中也是如此。

如果你没有声明你的变量是全局变量还是局部变量,枫叶会为你决定。如果一个变量出现在显式赋值的左侧,那么枫叶假定你打算将该变量设为局部变量。否则,枫叶假定该变量对整个会话是全局的。

枫叶将参数评估为零级,局部变量评估为一级,全局变量完全评估,除了最后一个名称评估。

标准的枫叶行为是命令不会直接影响传递给它的参数的值。

从各种计算机语言使用的传统参数传递机制来看,枫叶的参数传递可以被称为按评估的名称调用。

枫叶在调用过程之前会评估参数。一旦枫叶评估了参数,它就会用实际参数替换所有过程形式参数的出现。然后枫叶调用过程。

当你调用一个过程时,枫叶会根据调用发生的上下文适当地评估参数。

类型检查带来的轻微性能损失通常是值得的,因为它可以减少编程或使用错误。

枫叶每次调用过程时都会创建过程的局部变量。因此,局部变量对于过程的特定调用是局部的。

局部变量是在过程执行期间才使用的编程变量,之后会被丢弃。

局部变量是在过程内部的临时存储位置。

全局变量可以在枫叶中的任何过程内部以及交互级别使用。

枫叶程序中的参数和局部变量不受别名影响。

函数运算符

[编辑 | 编辑源代码]

枫叶中的函数运算符是过程的一种特殊形式。函数运算符使用箭头运算符->编写

>f := x -> 3*x + 5;
>f(2);
>g:=(u,v,w)->1/u+exp(u+v)+(u-v+w)^2;
>g(2*a,b,3*c);

即,函数运算符使用以下符号编写

vars -> 结果

其中vars是名称(变量),或括号之间的名称序列(对于两个或多个变量),result是表达式(函数作用于变量vars的结果)。

华夏公益教科书