mathematica-基于过程编程

在本章中,我们将介绍Mathematica的那些特性,它们与过程式编程语言(例如c、c++、Fortran和Pascal)的特性最为接近。过程式编程是一种编程风格,其特点是大量的小步骤和普遍使用的副作用(例如,赋值给变量)在这些步骤之间传递信息。它还依赖于迭代(如,循环)来处理数据集合。一般来说,如果您看到赋值语句和循环,则样式是过程化的。

而大多数Mathematica专家不鼓励使用过程化程序,对于那些主要使用上述语言的编程人员来说,这是一个非常有用的工具,可以帮助他们学习Mathematica编程。请记住,本章所阐述的大多数技术都只是“冰山一角”;也就是说,它们是非常强大的概念的简单表现,我们将在接下来的章节中更详细地探讨这些概念。

函数

Mathematica函数是一种编程构造,它允许您以一种方便的方式重复使用代码段。Mathematica内置了数以百计的函数,比如Integrate、Table和Plot。但是Mathematica也让你很容易定义你自己的函数,它可以像系统提供的函数一样复杂。

函数定义

area[]:=Pi r^2

上面是面积的定义。左边是函数声明,右边是函数体。

参数

area[]:=Pi r^2

其中r是参数名,_表示空白,意为“fill in the blank”,表示r是个参数,而不是一个值。

类型检查

每个表达式有一个Head,可认为是类型。

本地变量

使用Module定义本地变量(作用域内会变),不会污染全局作用域:

Module[declarations,body]

使用With声明本地常量(作用域内不会变):

With[{name=expr},body]

Set vs SetDelayed

Set右边的表达式定义时立即执行;而SetDelayed右边的表达式调用时才执行。

返回值

使用Return或者最后一个表达式的结果作为返回值。

条件执行

Mathematica提供三种条件执行方法:If,Switch和Which。

If

类似if-else

If[test,if,else]

Switch

类似switch

Switch[x,a,do,b,do,c,do,_,do]

Which

类似if-elseif-elseif-…-else

Which[test1,do,test2,do,test3,do,True,do]

迭代

提供Do,While,For,没有返回值。

Do

返回Null

Do[body,{i,min,max,step}]

For

返回Null

For[initializer,test,increment,body]

While

返回Null

While[test,body]

控制流

Break,Continue,Return,Goto,Label,Abort,Throw,Catch。

参数传递语义

参数非本地变量

不能在函数体内部修改参数。

值传递

通过把参数赋给本地变量,进而修改本地变量。

名称传递

类似C语言的宏。

引用传递

Head为Symbol的参数。

高级主题:作用域

函数作用域、Module作用域、With作用域,这些都成为词法作用域。还有一种动态作用域,由Block提供。

词法作用域vs动态作用域

词法作用域中的变量是单独的变量,不和全局变量冲突。而动态作用域的变量可以暂时使全局变量失效。

嵌套作用域结构

With、Module和Block作用域可以嵌套使用,进行粒度更小的控制。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值