13 lines
687 B
Plaintext
13 lines
687 B
Plaintext
/* 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,%%));
|