Ivane, to s PHP bylo myšleno jako humor. Živelnost a nekonzistence vývoje je na něm velmi znát, což mi nejvíc vadí (+ extrémně krátká doba podpory verzí - 3 roky - když nejsou zpětně kompatibilní) ... no a pak neefektivita téměř všeho. Fakt, že přebírá věci z Javy/Pythonu, není až tak na škodu. .Net taky vykrádal Javu jak se dalo (včetně knihoven, namátkou log4net, NHibernate (v době před Linq to SQL a Entity fwk nebylo nic jiného) atp). Na durhou stranu Javová Stream Library nápadně připomíná Linq, knihovna ModelMapper je převzetí konceptu AutoMapper apod.
Co se týče cyklů a rekurze, podle mě je rekurze jednodušší a na složitější algoritmy čitelnější, ale záleží na zvyku - nejsi-li na to zvyklý, určitě můj názor sdílet nebudeš :-) . Kde rekurze ztrácí na přehlednosti je podle mě pouze jednoduché zpracování prvků kolekce, na složitější věci je IMHO paradoxně mnohem jednodušší - pokud ovšem nenapíšeš 100 a více řádkovou rekurzivní funkci.
Pokud chceš jen projít kolekci prvků a transformovat ji na jinou (běžné použití cyklů v imperativním jazyku), ve funkcionálním jazyce máš většinou funkce jako map/filter/reduce. (V PHP jsou taky - array_map, array_filter, array_reduce.) Tím odpadne většina použití cyklů. Kdyby ještě existovala funkce jako array_foreach (což AFAIK v PHP není), odpadly by téměř všechny. Jinak tohle není jen záležitost funkcionálního programování, mluví se o nich i v knížce GoF Design Patterns (viz interní iterátory).
U rekurze je nepříjemné, že pokud nemáš tzv. koncovou rekurzi (tail-call recursion) a překladač jazyka ji nedokáže optimalizovat (obě podmínky musí být splněny), pak velice rychle zapráskáš zásobník. Nevím, jak velký je u PHP, ale u 64bitových ASP.Net aplikací je 512KB. Dost málo. Proto se většinou nepoužívá jinde než ve škole pro jednoduché algoritmy, mnozí programátoři (ani vysokoškoláci) na ni nejsou zvyklí a když vidí zápis složitějšího algoritmu (kde by rekurze mohla pomoct), tak se toho zápisu spíš leknou.
Clojure, stejně jako Scala, je plná kompromisů. Clojure je poměrně čistý jazyk, ale konstrukce jako loop-recur byly nutné kvůli JVM, které právě optimalizaci koncové rekurze nepodporuje. Stejně tak je potřeba komunikovat s Java knihovnami a proto tam jsou procedurální a objektově orientované prvky. Když je to neúnosné, řeším to tak, že kolem Java knihovny udělám příjemnější rozhraní pro použití v Clojure. Leiningen podporuje kombinované projekty v Clojure/Java celkem slušně. Většinou to nezabere až tolik času - knihovnu místo z Clojure zavolám z Java kódu a rozhraní své funkce si udělám tak, aby bylo snadno zavolatelné z Clojure.