RosettaCodeData/Task/Execute-a-Markov-algorithm/Icon/execute-a-markov-algorithm....

23 lines
591 B
Plaintext

procedure main(A)
rules := loadRules(open(A[1],"r"))
every write(line := !&input, " -> ",apply(rules, line))
end
record rule(pat, term, rep)
procedure loadRules(f)
rules := []
every !f ? if not ="#" then put(rules,
rule(1(trim(tab(find("->"))),move(2),tab(many(' \t'))),
(="."|&null), trim(tab(0))))
return rules
end
procedure apply(rules, line)
s := line
repeat {
s ?:= tab(find((r := !rules).pat)) || r.rep || (move(*r.pat),tab(0))
if (s == line) | \r.term then return s else line := s
}
end