// // in? // in?(elem, seq) = find(elem, seq) != end(seq); // // trim, trimBeginning, trimEnd // trim(trim, seq) = String(trimBeginningSlice(trim, trimEndSlice(trim, seq))); trimBeginning(trim, seq) = String(trimBeginningSlice(trim, seq)); trimEnd(trim, seq) = String(trimEndSlice(trim, seq)); // // trimSlice, trimBeginningSlice, trimEndSlice // trimSlice(trim, seq) = trimBeginningSlice(trim, trimEndSlice(trim, seq)); trimBeginningSlice(trim, seq) { var i = 0; for (x in seq) { if (in?(x, trim)) inc(i); else break; } return sliceFrom(seq, i); } trimEndSlice(trim, seq) { var i = 0; for (x in reverse(seq)) { if (in?(x,trim)) inc(i); else break; } return sliceUpto(seq, size(seq) - i); } // // beginsWith?, endsWith? // beginsWith?(x, seq) = sliceUpto(seq, size(x)) == x; endsWith?(x, seq) { if (size(seq) < size(x)) return false; return sliceFrom(seq, size(seq) - size(x)) == x; }