Portál AbcLinuxu, 5. května 2025 09:22

Dotaz: Erlang a pipe operator

29.12.2013 00:48 erl
Erlang a pipe operator
Přečteno: 426×
Odpovědět | Admin
Trosku si "osahavam" erlang a neviem nikde najst pipe operator |>

myslim trebars ze toto:
main() ->
    pred(succ(succ(5))).
si v inych funkcionalnych jazykoch mozem prepisat na:
main() ->
    5
    |> succ
    |> succ
    |> pred.
a sprehladnit tak cely zapis. ma erlang nieco podobne?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.12.2013 12:17 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Erlang a pipe operator
Odpovědět | | Sbalit | Link | Blokovat | Admin
Erlang nic takoveho jako "pipe operator" nema, ale lze si napsat vlastni funkci, napr:
compose(F,G) -> fun(X) -> F(G(X)) end.
 
multicompose(Fs) -> 
    lists:foldl(fun compose/2, fun(X) -> X end, Fs).

main() ->
    (multicompose([fun pred/1, fun succ/1, fun succ/1]))(5).
Ale neda se rict, ze by to moc zprehlednilo :-) .
29.12.2013 17:03 erl
Rozbalit Rozbalit vše Re: Erlang a pipe operator
pipe (|>) je nieco trochu ine ako compose (>>)

pipe operator robi toto: let (|>) x f = f x

V Erlangu sa nedaju definovat vlastne operatory?
30.12.2013 10:31 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Erlang a pipe operator
Tak ja priblizne tusim co je pipe operator a tohle bylo podle me nejblizsi co se da v Erlangu dosahnout.
Vlastni operatory nejdou definovat. Jedine co umi je klasicky preprocesor (makra) a parse transformace. Parse transformace je funkce ktera se vola v dobe prekladu. Jako vstup je AST a jako vystup je AST -> pouziva s k libovolne manipulaci s AST, ale jako vstup musi byt vzdy validni AST.
Asi by se to nejak dalo pouzit, ale nenapada me dost primocara moznost.
Napr. mi pouzivame parse transformaci na hezci zapis interni reprezentace JSONu -https://github.com/bossek/embjson

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.