“‘我的感觉和想法与你非常相似,关心你关心的许多事情,尽管大多数人并不关心它们。你并不孤单。” ——库尔特·冯内古特
之前的文章
首次接触 M 语言的开发者可能会很快觉得它很奇怪和陌生。这里有个好消息:如果你使用过 R,或者有认识 R 的朋友,那么你就找到了同伴,并且可以在更短的时间内学会 M。此外,你可以将 M 与 R 结合使用,获得一个强大的工具,并拥有出色的统计软件包。
开源世界一切都很好。
说够了,让我们开始打字吧。
打开两个终端。左边是你的 M 解释器,右边是你的 R 解释器。
|
M |
R |
启动解释器 |
gtm |
R |
你将看到的提示符 |
GTM> |
> |
如何退出解释器 |
HALT |
q() |
请求通用帮助 |
ZHELP |
help() |
请求特定帮助 |
ZHELP("HALT") |
help("q") |
分配变量 |
SET A=10 SET X="Higgs" |
A <- 10 X <- "Higgs" |
显示变量 |
WRITE A |
print(A) |
变量区分大小写 |
SET A=12 SET a=15 WRITE A WRITE a |
A <-12 a<-15 print(a) print(A) |
列表赋值 |
SET k("name")="Mary", k("spouse")="John", k("father")="Peter", k("mother")="Anne" |
k <- list(name="Mary", spouse="John", father="Peter", mother="Anne") |
列表元素访问 |
WRITE k("name") WRITE k("spouse") WRITE k("father") WRITE k("mother") SET idx="name" WRITE k(idx) |
print(k[["name"]]) print(k[["spouse"]]) print(k[["father"]]) print(k[["mother"]]) idx <- "name" print(k[[idx]]) |
基本函数 |
SQR(x) QUIT x*x |
sqr < - function(x) { x*x } |
调用函数 |
WRITE $$SQR^SQR(3) |
print(sqr(3)) |
代码是活的
R 具有内置的面向对象模型,而 M 具有灵活的数据模型。它们都使你能够表达如下情况:一个对象具有一组数据属性和一组行为,并且它们都可以在运行时更改。
例如,让我们考虑一辆汽车。让我们考虑汽车的三个基本属性:制造商、型号和里程。假设制造商和型号是汽车的“数据”属性,而里程是根据实验条件计算出来的,并且可能会随着你驾驶汽车的方式而变化。
让我们用 R 来表达这一点
car <- list(make=”toyota”,model=”corolla”,mileage=5)
现在,鉴于 后期绑定 在 R 中赋予我们的灵活性,我们可以决定将里程从数字更改为函数
car$mileage <- function(miles,gallons) { miles/gallons }
最后,我们可以从汽车查询信息
print(car$make)
print(car$model)
print(car$mileage(150,4))
现在让我们用 M 做等效的事情
SET ^car(“make”)=”toyota”,^car(“model”)=”corolla”,^car(“mileage”)=5
然后,使用 ZEDIT 命令将以下代码放入名为 mileage.m 的文件中
ZEDIT “mileage”
然后键入
compute(miles,gallons)
quit miles/gallons
请注意,在第二行中,“quit”命令向右缩进了一个空格。保存文件并返回到解释器。然后键入
SET ^car(“mileage”)=”$$compute^mileage”
最后,我们从汽车查询信息
WRITE ^car(“make”)
WRITE ^car(“model”)
WRITE @^car(“mileage”)@(150,4))
请注意,围绕字符串“^car(“mileage”)”的“@”符号表示解释器要执行一层间接寻址。换句话说,它们告诉解释器查看数组“^car”中字段“mileage”的内容,并在该表达式中替换它。
这些示例说明 M——就像 R 一样——提供了一个环境,人们可以在其中组合复杂的结构,并使用它们来建模现实世界问题的概念。
现在想象一下:当我们把最强大的开源统计语言之一与最强大的开源 NoSQL 数据库之一结合起来时会发生什么?
我们下次再谈论这个。
了解更多
- M 语言完整参考
- MUMPS 袖珍指南
- MUMPS 示例
- R 语言入门
- Richard Walters,“M Programming, A Comprehensive Guide”,Elsevier Digital Press,1997
- John M. Chambers,“Software for Data Analysis: Programming with R”,Springer,2008
5 条评论