fcn parseRuleSet(lines){ if(vm.numArgs>1) lines=vm.arglist; // lines or object ks:=L(); vs:=L(); foreach line in (lines){ if(line[0]=="#") continue; // nuke pattern,replacement:=line.replace("\t"," ") .split(" -> ",1).apply("strip"); ks.append(pattern); vs.append(replacement); } return(ks,vs); } fcn markov(text,rules){ ks,vs:=rules; eks:=ks.enumerate(); do{ go:=False; foreach n,k in (eks){ if (Void!=text.find(k)){ if (Void==(v:=vs[n])) return(text); if (v[0,1]==".") v=v[1,*] else go=True; text=text.replace(k,v,1); break; // restart after every rule application, unless terminating } } }while(go); text }