srep(n, s) := block( l: charlist(s), lrep: map(lambda([c], smake(n, c)), l), apply(sconcat, lrep) )$ srep_zip(nums, strings) := block( len: min(length(nums), length(strings)), makelist(srep(nums[i], strings[i]), i, 1, len) )$ genfizzbuzz(factors, words, n1, n2) := for i from n1 thru n2 do( flags: map(lambda([k], charfun(mod(i, k)=0)), factors), if member(1, flags) then sprint(apply(sconcat, srep_zip(flags, words))) else sprint(i), if mod(i-n1+1, 10)=0 then newline() )$ genfizzbuzz([3, 5, 7], ["Fizz", "Buzz", "Baxx"], 1, 105);