RosettaCodeData/Task/Odd-word-problem/M2000-Interpreter/odd-word-problem-1.m2000
2023-07-01 13:44:08 -04:00

87 lines
2.6 KiB
Text

Module Checkit {
global out$
document out$
Function PrepareStream$ (buf$) {
\\ get a temporary file
if buf$="" then {
class ref {
f
class:
module ref (.f) { }
}
\\ make f closure by reference
m->ref(false)
=lambda$ m->{
if m=>f then exit
r$=Key$
m=>f=r$="."
=r$
}
\\ exit function
break
}
name$=tempname$
\\ we use Ansi type files
Open name$ for output as F
Print #F, buf$;
Close #F
Open name$ for input as #f
class ref {
f
class:
module ref (.f) { }
}
\\ make f closure by reference
m->ref(f)
=lambda$ m -> {
if m=>f=-1000 then exit
def r$
if not eof(#m=>f) then r$=Input$(#m=>f,2)
=r$
if r$="" or r$="." then close #m=>f : m=>f=-1000
}
}
Module Odd(c$) {
one$=""
Module MyEven(c$, &last$) {
one$=If$(last$=""->c$(), last$)
if one$="" then exit
if not one$ ~"[a-zA-Z]" Then last$=one$: exit
\\ print before
Print one$;
out$<=one$
Call MyEven, c$, &last$
}
Module MyOdd(c$, &last$) {
one$=If$(last$=""->c$(), last$)
if one$="" then exit
if not one$ ~"[a-zA-Z]" Then last$=one$: exit
Call MyOdd, c$, &last$
\\ print after
Print one$;
out$<=one$
}
Do {
one$=""
Call MyEven, c$, &one$
if one$="" then exit
Print one$;
out$<=one$
one$=""
Call MyOdd, c$, &one$
if one$="" then exit
Print one$;
out$<=one$
} Always
Print
out$<={
}
}
\\ Feeding keyboard
keyboard "what,is,the;meaning,of:life."
Odd PrepareStream$("")
\\ Use a file for input
Odd PrepareStream$("we,are;not,in,kansas;any,more.")
clipboard out$
}
Checkit