我正在开发一个需要 MUMPS 示例代码的分析工具。谁能提供给我 MUMPS 实时代码或示例代码?还建议一些相同的链接。
7 回答
这是我为了好玩而写的一些 MUMPS。我想如果你能分析一下,你的工具可以工作:
Q N R,Q,C,D,E,W,B,G,H,S,T,U,V,F,L,P,N,J,A S N=$G(N),Q='N,F=Q+Q,P=F+F,W=$L($T(Q))
S W=$E(W,Q),S='N_+N,W=W-F*S,L=$G(L),R=$C(Q_F_P),R(F)=$C(F+Q_F),R(P)=$C(W-F) W #
S T=$E($T(Q+F),F,W\S)_$C(W+S+F) X T S B=$P(T,$C(P_P),F),C=B\(W*W),D=B-(C*W*W)\W
F G=S-Q:F:S+F+Q S E=B-(C*W*W+(D*W)),H=$E($T(Q),G),@H=$S(@H<S:'Q,Q:N)_@H,T=C_D_E
F A=Q:Q:W\S S J=$E(T,A),C(F)=$S(J>(F+Q)&(J<(S-F)):Q,Q:+N),C(P)=$S(J#F:Q,Q:+N) D
.S C(Q)=$S(J<(S-F):+N,Q:Q),C(F+Q)=$S(J>Q&(J<(S-F))&(J'=(P+'L))&(J'=(P)):Q,Q:+N)
.S H('L)=L F S H(N?.E)=$O(C(H('$G(N)))) Q:H('+L)=L S F(A,H('L))=C(H(W[(W\S)))
F U=Q:Q:P W !,R F V=Q:Q:P+F W $S(F(V,U):'Q,Q:$C(P_(W\S))) W:'(V#F) $C('N_F_F+F)
W !!,R(F)_C_R(P)_D_R(P)_E_R(F) X $RE($E($T(Q),Q+F,P+Q))_R(P)_'N W # G:N=L Q+F Q
看马,没有文字!
这会输出一个二进制时钟:
:D Q^ROU
|..|..|..|
|..|..|.0|
|..|.0|0.|
|..|00|..|
00:13:24
GitHub 实际上托管了许多 MUMPS 软件,但不幸的是,它被标记为 Objective-C 或 Matlab,因此在那里搜索 MUMPS 代码并不容易。以下是一些我知道至少部分使用 MUMPS 完成的项目:
VitA 是在 MUMPS 上编写的退伍军人管理局的开源 EMR。您可以在此处从 Vista wiki 下载它:OpenVistA 下载页面
我没有尝试自己下载它,因此您可能需要安装 MUMPS 才能访问源代码。祝你好运!
我认为这些都不足以用于分析目的,但在M[UMPS] by Example中有很多小例子。MUMPS Wikipedia页面上也有一些冗长的示例。我不知道他们是否是独立的。自己没有测试过它们。
这是“你好世界”:w "Hello world!",!
Thew
是write
- 的缩写,可以接受,但缩写更惯用。文字!
是换行符。
这是一个斐波那契实现,首先没有缩写,然后
innerFibonacci(value,cache)
if $data(cache(value))=1 quit cache(value)
set cache(value)=$$innerFibonacci(value-1,.cache)+$$innerFibonacci(value-2,.cache)
quit cache(value)
fibonacci(value)
new cache
set cache(0)=1
set cache(1)=1
quit $$innerFibonacci(value,.cache)
这与更惯用的缩写相同:
innerFibonacci(value,cache)
i $d(cache(value))=1 q cache(value)
s cache(value)=$$innerFibonacci(value-1,.cache)+$$innerFibonacci(value-2,.cache)
q cache(value)
fibonacci(value)
n cache
s cache(0)=1
s cache(1)=1
q $$innerFibonacci(value,.cache)
现在 - MUMPS 中的递归是一件非常危险的事情,因为 MUMPS 解释器不会自动将尾递归转换为迭代 - 所以这很容易因为大值而爆炸。
这是一个更多的“MUMPS-y”示例,它实际上利用了 MUMPS 的单一数据结构,它本质上是一个排序数组,其索引可以是数字或字符串。为这些阵列添加前缀并^
保存到磁盘。这些$
东西是语言内置的功能。这q:
是quit
命令的后置条件,意思是“如果人等于“”则退出。
这里没有缩写,然后是:
peopleFoodCombinations(people,food)
new person
for set person=$order(people(person)) quit:person="" do
. set ^PEOPLE(person,"favoriteFood")=$get(food(person))
quit
现在用缩写:
peopleFoodCombinations(people,food)
n person
f s person=$o(people(person)) q:person="" d
. s ^PEOPLE(person,"favoriteFood")=$g(food(person))
q
这是示例代码,循环遍历全局,遍历它并在终端中打印数据。
TESTLOG
S TC=""
F S TC=$O(^TCLOG(TC)) Q:TC="" D
. S LogDT=""
. F S LogDT=$O(^TCLOG(TC,LogDT)) Q:LogDT="" D
. . S Type=""
. . F S Type=$O(^TCLOG(TC,LogDT,Type)) Q:Type="" D
. . . Q:Type'="UPDATE"
. . . S LogData=$G(^TCLOG(TC,LogDT,"UPDATE"))
. . . W !,LogData
Q
并找到以下链接以获取更多参考 http://www.vistapedia.com/index.php/MUMPS_Code_Examples