Нужен образец кода MUMPS - PullRequest
       6

Нужен образец кода MUMPS

10 голосов
/ 11 ноября 2010

Я работаю над инструментом анализа, для которого мне нужен пример кода MUMPS.Может ли кто-нибудь предоставить мне MUMPS живой код или пример кода?Также предложите несколько ссылок для того же.

Ответы [ 7 ]

19 голосов
/ 16 июня 2011

Это некоторые СЦЕНЫ, которые я написал для забавы. Я думаю, если вы можете проанализировать это, ваш инструмент работает:

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
4 голосов
/ 30 августа 2012

GitHub на самом деле является хостом для многих программ MUMPS, но, к сожалению, он помечен как Objective-C или Matlab, поэтому поиск кода MUMPS там не так прост.Вот некоторые проекты, которые, я знаю, выполняются хотя бы частично с использованием MUMPS:

  1. OSEHRA
  2. Reynard GT.M Server
  3. GT.M Размер термина
  4. GT.M Расширение POSIX
  5. Тетрис в MUMPS
  6. Пример сочного MUMPS
  7. GT.M Расширение PCRE
  8. GT.M Расширение дайджеста
  9. DataBallet
  10. Source KIDS
  11. Инструменты разработки программного обеспечения для MUMPS
3 голосов
/ 19 января 2011

Смотрите здесь:

http://www.faqs.org/faqs/m-technology-faq/part2/

Прокрутите вниз (или найдите) заголовок раздела "Приложение 6" (без двойных кавычек).

HTH Натан

3 голосов
/ 13 декабря 2010

VistA - это EMR с открытым исходным кодом для Администрации ветеранов, написанная на MUMPS. Вы можете скачать его с вики VistA здесь: Страница загрузки OpenVistA

Я не пытался загрузить его сам, поэтому вам может потребоваться установить MUMPS, чтобы получить доступ к источнику. Удачи!

3 голосов
/ 12 ноября 2010

Не думаю, что всего этого будет достаточно для анализа, но есть много небольших примеров на M [UMPS] по Примеру . На странице MUMPS Wikipedia также есть несколько длинных примеров. Я не знаю, одиноки ли они или нет. Сам не проверял их.

0 голосов
/ 09 апреля 2018

Вот пример кода, чтобы пройти через глобальный, пройти его и распечатайте данные в терминале.

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

0 голосов
/ 11 декабря 2017

Вот "привет мир": w "Hello world!",!

w - это сокращение от 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
...