Execute a Markov algorithm: Difference between revisions
Content deleted Content added
Added BBC BASIC |
→{{header|REXX}}: added the REXX language. -- ~~~~ |
||
Line 1,676: | Line 1,676: | ||
assert replace(text4, extractreplacements(grammar5)) \ |
assert replace(text4, extractreplacements(grammar5)) \ |
||
== '00011H1111000'</lang> |
== '00011H1111000'</lang> |
||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX pgm to execute a Markov algorithm(s) against specified entries.*/ |
|||
parse arg low high . /*allow which ruleset to process.*/ |
|||
if low=='' | low==',' then low=1 /*assume a default if none given.*/ |
|||
if high=='' | high==',' then high=6 /*assume a default if none given.*/ |
|||
tellE = low<0; tellR = high<0 /*flags: display file contents. */ |
|||
call readEntry |
|||
do j=abs(low) to abs(high) /*process each of these rulesets.*/ |
|||
call readRules j /*read a particular ruleset. */ |
|||
call execRules j /*execute " " " */ |
|||
say 'result for ruleset' j"≡"!.j |
|||
end /*j*/ |
|||
exit /*stick a fork in it, we're done.*/ |
|||
/*───────────────────────────────EXECRULES──────────────────────────────*/ |
|||
execRules: parse arg q .; if tellE | tellR then say |
|||
do f=1 /* forever */ |
|||
do k=1 while @.k\==''; if left(@.k,1)=='#' | @.k='' then iterate |
|||
parse var @.k a ' ->' b; a=strip(a); b=strip(b) |
|||
fullstop= left(b,1)=='.' /*is this a fullstop rule? */ |
|||
if fullstop then b=substr(b,2) /*purify the B part of the rule. */ |
|||
old=!.q /*remember value before change. */ |
|||
!.q=changestr(a, !.q, b) /*implement the ruleset change. */ |
|||
if fullstop then if old\==!.q then return /*should we stop?*/ |
|||
if old\==!.q then iterate f /*Entry changed? Then start over*/ |
|||
end /*k*/ |
|||
leave |
|||
end /*f*/ |
|||
return |
|||
/*───────────────────────────────READRULES──────────────────────────────*/ |
|||
readRules: parse arg ? .; rFID='MARKOV_R.'?; if tellR then say |
|||
@.= /*placeholder: all Markov rules.*/ |
|||
do r=1 while lines(rFID)\==0 /*read the input file until E-O-F*/ |
|||
@.r=linein(rFID); if tellR then say 'ruleSet' ?"."left(r,4)'≡'@.r |
|||
end /*r*/ /*(above) read and maybe echo it.*/ |
|||
return |
|||
/*───────────────────────────────READENTRY──────────────────────────────*/ |
|||
readEntry: eFID='MARKOV.ENT'; if tellE then say |
|||
!.= /*placeholder: all test entries.*/ |
|||
do e=1 while lines(eFID)\==0 /*read the input file until E-O-F*/ |
|||
!.e=linein(eFID); if tellE then say 'test entry' e"≡"!.e |
|||
end /*e*/ /*(above) read and maybe echo it.*/ |
|||
return</lang> |
|||
'''output''' when using the default input and files: |
|||
<pre style="overflow:scroll"> |
|||
result for ruleset 1≡I bought a bag of apples from my brother. |
|||
result for ruleset 2≡I bought a bag of apples from T shop. |
|||
result for ruleset 3≡I bought a bag of apples with my money from T shop. |
|||
result for ruleset 4≡11111111111111111111 |
|||
result for ruleset 5≡00011H1111000 |
|||
result for ruleset 6≡||||| |
|||
</pre> |
|||
'''Ruleset 6''' is: |
|||
<pre style="overflow:scroll"> |
|||
# Rewrite binary numbers to their unary value (| bars). |
|||
# I.E.: 101 [base 2] will be converted to 5 bars. |
|||
#────────────────────────────────────────────────────── |
|||
|0 -> 0|| |
|||
1 -> 0| |
|||
0 -> |
|||
</pre> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |