/* Function to return a list where all but the last entries are integers */ intbucket(lst):=block(bucket:[],while integerp(first(lst)) do (push(first(lst),bucket),lst:rest(lst)),lst:append(reverse(bucket),[first(lst)])); /* Run-length decoding */ rld(string_list):=block( coref:map(eval_string,charlist(string_list)), listcharact:sublist(coref,lambda([x],integerp(x)=false)), map(intbucket,append([coref],makelist(coref:rest(coref,length(intbucket(coref))),length(listcharact)-1))), makelist(sublist(%%[i],integerp),i,1,length(%%)), map(eval_string,makelist(apply(concat,%%[i]),i,1,length(%%))), makelist(smake(%%[i],string(listcharact[i])),i,1,length(listcharact)), apply(concat,%%));