加入 M 革命 – M 和 R 编程语言

还没有读者喜欢这篇文章。
MUMPS, M and R programming languages

Opensource.com

“‘我的感觉和想法与你非常相似,关心你关心的许多事情,尽管大多数人并不关心它们。你并不孤单。” ——库尔特·冯内古特

之前的文章

首次接触 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 数据库之一结合起来时会发生什么? 

我们下次再谈论这个。

了解更多

标签
User profile image.
Luis Ibáñez 在芝加哥的 Google Inc 担任高级软件工程师。

5 条评论

抱歉,但 M 看起来太像 COBOL 了。

我听到了你的声音 :-)

大写风格确实让我想起了 COBOL。但请注意,这只是编码风格的问题,实际上是可选的。你可以同样很好地用小写字母编写 M 代码。

从结构上看,M 比 COBOL 更接近 C 和汇编。特别是在语言的灵活性以及以紧凑的方式编写复杂表达式的能力方面(与编写 C 时可能遇到的优点和风险相同)。

你也可以看看强大的 J 语言

http://www.jsoftware.com/

你可以下载免费的开源解释器并试用它。

多年来我玩过几次 J。它主要是由 Ken Iverson 完成的,他的早期作品是 APL,直到今天我仍然更喜欢 APL。

APL 是我在 70 年代初学到的第一种计算机语言,它对我来说感觉很自然。J 既足够接近 APL,又足够遥远,以至于不知何故感觉不太对劲。

感谢你指出 J,
我以前不知道它。

看到它的数据库连接很有趣
http://www.jsoftware.com/jwiki/JDB

以及 iOS 平台
http://www.jsoftware.com/jwiki/Guides/iOS

Creative Commons License本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。
© . All rights reserved.