改行しかしない

30分プログラム、その797。anarchy golf - Carriage no returnにインスパイアされました。

使い方

- no_return "abc\ndef";
val it = "abc\n   def" : string

ソースコード

fun lines s =
    String.tokens (fn c => c = #"\n") s;
fun unlines xs =
    String.concatWith "\n" xs;

fun pad n =
    String.implode (List.tabulate (n,(fn _ => #" ")));

fun fst (x,_) = x;
fun snd (_,y) = y;

fun concat_with_pad xs =
    List.foldl
	(fn (x,(n,ys)) => (String.size x + n, (pad n) ^ x :: ys))
	(0,[])
	xs;

fun no_return str =
    unlines (List.rev (snd (concat_with_pad (lines str))));