mclap (mclap) wrote,
mclap
mclap

немного ерланга под утро

is_char(C) when C < 0; C > 255 -> false;
is_char(_) -> true.

%% (c) mclap 
strip_html(HTML) ->
	case is_list(HTML) of
		true -> case lists:all(fun(V) -> is_char(V) end, HTML) of
			true -> HTML;
			false -> lists:foldl(fun(X, AccIn) -> 
					strip_html(X) ++ AccIn
					end, "", HTML)
			end;
		false -> case tuple_size(HTML) of
			2 -> strip_html(element(2,HTML));
			_ -> strip_html(element(2,HTML)) ++
				 strip_html(element(3,HTML))
			end
end.

test() ->
	strip_html(example_data()).

Еще немного прекрасного из черновиков:
decode2(<<1:1, V:7, Rest/binary>>) ->
        {S, L} = decode2(Rest),
        {S bsl 7 + V, L+1};
decode2(<<0:1, V:7, _>>) ->
        { V, 1 };
decode2(<<0:1, V:7>>) ->
        { V, 1 }.

let rec decode = function
    | h::t when (h<128) -> h
    | h::t -> ((decode t) lsl 7) + (h land 127)

Аналогичный куску на Ocaml код на C занимает не менее 5 строк, а с комментариями и прочими проверками аргументов - уже экран (правда не в черновике, а в работе ;-)
Tags: erlang, ocaml
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments