Porady i pułapki w nauce XSLT i "prawdziwego" programowania funkcyjnego?

Do niedawna moja znajomość XSLT była wystarczająca dla moich prostych, prostych potrzeb. Ale bardziej zaawansowane Wymaganie wysłało mnie do materiału referencyjnego, gdy "tylko próbuję rzeczy" nie zadziałało. Fajnie było zacząć od początku. Początkowo nauczyłem się XSLT w środku presji terminowej i w 20/20 hindsight " praca "była wyraźnie ważniejsza niż" zrozumienie."

Zaskoczyło mnie przeczytanie na stronie 33 książki Michaela Kay że XSLT ma swoje korzenie w Schemat. Wikipedia mówi:

Scheme jest jednym z dwóch głównych dialektów języka programowania Lisp.

Może wiem (lub wkrótce będę wiedział) więcej o programowaniu funkcyjnym niż myślałem. Szukając postów typu czy XSLT jest funkcjonalnym językiem programowania? i po jego roboczych linkach widać, że istnieje kilka opinii, czy XSTL jest językiem funkcyjnym, czy też nie. Z posta jaki język programowania funkcyjnego powinienem wybrać jako pierwszy funkcjonalny język programowania? dostałem radę, aby najpierw nauczyć się F#, ponieważ pochodzę z. NET i lubię szybko dostać się do przydatnych programów.

Moje pierwsze pytanie brzmi: jeśli ktoś bardzo dobrze zna XSLT 2.0, to ile z "prawdziwego" języka programowania funkcyjnego, takiego jak F#, Lisp czy Haskell zna już przed nauką F#, Lisp czy Haskell? Dla celów dyskusji Załóżmy, że osoba, która "bardzo dobrze zna XSLT 2.0", uczy się bardzo niewielu nowych pojęć za pierwszym razem, gdy czyta XSLT Cookbook . Zamiast tego jej reakcja na nieznane informacje brzmi: "oczywiście, że to dobry sposób na to. Powinienem był o tym pomyśleć!"

Drugie pytanie brzmi, czy są jakieś części XSLT 2.0 / XPath 2.0, które powinienem dobrze zrozumieć, aby ułatwić naukę F# / Lisp / Haskell?

Po trzecie, czy są części XSLT, które najlepiej zignorować, jeśli ktoś planuje w końcu nauczyć się F # / Lisp / Haskell / etc.? Czyli czy XSLT ma pojęcia analogiczne do GOTO, ALTER and ON ERROR RESUME NEXT that are not appropriate in "real" functional programming languages?

Krótkie odpowiedzi są w porządku, ponieważ nauka funkcjonalnego języka programowania jest dla mnie nieplanowanym przyszłym projektem.

P. S. kilka hiperłączy usuniętych z powodu braku reputacji. Cholera! ;-)

Author: ROMANIA_engineer, 2010-02-10

4 answers

Radzę nie opierać się zbytnio na XSLT, gdy uczysz się swojego pierwszego drugiego funkcjonalnego języka. Oto co myślę:

  • Istnieje teraz bardzo wiele dobrych "na rampach" do różnych języków funkcyjnych, które nie zakładają wcześniejszej wiedzy i doświadczenia. Jeśli twoje doświadczenie XSLT pozwala Ci podróżować szybciej na rampie, wszyscy jesteśmy zaskoczeni i zadowoleni, ale nie jest to konieczne.

  • Programiści funkcjonalni bardzo dbają o składnia. Programiści XSLT zmuszeni są do używania składni XML. W związku z tym istnieje duże ograniczenie w zakresie norm i wartości wspólnotowych między obiema społecznościami.

  • Typowy język funkcjonalny jest nie tylko funkcjonalny, ale ma w sobie coś wyjątkowego, o co dba, co nadaje językowi niepowtarzalny smak. Niektóre przykłady (w kolejności alfabetycznej):

      Erlang dba o niezawodność i obliczenia równoległe / rozproszone.
  • F # dba o dobrą współpracę z system. NET framework i type.
  • Haskell dba o czystość, o seksowne typy i o jedną koncepcję pięknej składni]}
  • Scheme dba o rozszerzalność i zupełnie inną koncepcję pięknej składni.
  • XSLT dba o dopasowanie wzorców i przetwarzanie XML.

Jest mnóstwo materiałów na temat SO I gdzie indziej o wyborze języka funkcjonalnego do nauki; jeśli chcesz, możesz zobaczyć jaki jeden poliglota funkcjonalny programista myśli . Wybierz język-dowolny język-i usiądź wygodnie, bierz się do pracy i ciesz się lotem!

 4
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:02

Pobawiłem się trochę z XSLT i zagłębiłem się głębiej w funkcjonalne języki Lisp, Scheme i Haskell. Z tego, co niewiele widziałem, nie jestem pewien, czy XSLT jako powszechnie używany nauczy cię tak wiele o językach funkcyjnych. Możesz nauczyć się kilku sztuczek, ale moim zdaniem JavaScript jest lepszym analogiem do tego, co zobaczysz w nietypowanych językach funkcyjnych.

Wikipedia popiera mnie w tej kwestii:

Jako język, XSLT jest pod wpływem języków funkcyjnych, a przez języki dopasowujące wzorce tekstowe jak SNOBOL i awk. Najbardziej bezpośredni poprzednikiem był ISO DSSSL, język które spełniały tę samą funkcję dla pełny SGML, który XSLT wykonuje dla XML. Wielu z Komitetu Normalizacyjnego, które opracowany XSLT wcześniej pracował na DSSSL, w tym James Clark. XSLT można również uznać Turinga za kompletnego procesor szablonów.

Innymi słowy, zapożycza wiele z języków funkcyjnych, ale także zapożycza z języków szablonowych, takich jak awk i SGML. Więc tak, jest to język funkcjonalny, w ten sam nie do końca oczywisty sposób, że szablony C++ są językiem funkcyjnym . Ale nie ma łatwej do zmapowania linii od nauki XSLT do Scheme lub Haskell.

Nie lekceważ również, Jak różne języki funkcyjne mogą być od siebie różne. Lisp i Scheme są tak luźno napisane, że czują się zasadniczo bez liter. Myślę o tych językach jak mandaryński chiński z języki programowania, z zasadniczo płynną, opartą na kontekście składnią. Haskell natomiast jest tak mocno pisany, że myli nawet doświadczonych programistów. Sięga również poza korzenie rachunku lambda, aby zapożyczyć pojęcia z algebry abstrakcyjnej i teorii kategorii, dzięki czemu nauka dla typów nie-matematycznych jest nieco Oszałamiająca.

Ale nic z tego nie ma cię zniechęcić. Za wszelką cenę naucz się języka funkcjonalnego. Zmienią twoje podejście do programowania w sposób, w jaki nigdy nie podejrzewaj.

 5
Author: rtperson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-10 19:40:08

Nie jestem tak wykwalifikowany, jak jestem pewien, że niektórzy odpowiedzą. Używałem Haskell, Scheme i XSLT, choć nauczyłem się ich w odwrotnej kolejności -- Scheme, następnie Haskell, a następnie za pomocą XSLT do podstawowych rzeczy. Odkryłem, że procesy myślowe, których nauczyłem się za pomocą Scheme, a później Haskell, zdecydowanie pomogły mi zrozumieć koncepcje wysokiego poziomu programowania XSLT. Wszystkie szczegóły, oczywiście, nadal musiały być pogłębiane z prowadnic odniesienia i tym podobne.

Wyobrażam sobie, że znajdziesz ten sam efekt w odwrotnej kolejności.

(odkryłem również, że XSLT, podobnie jak inne języki programowania w XML, jest bolesnym sposobem przetwarzania pliku XML, a samo pisanie skryptu w Pythonie było łatwiejsze, szybsze i bardziej elastyczne).

 2
Author: Scott Stafford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-10 19:25:59

Uważam, że XSLT jest w rzeczywistości dobrym pierwszym czystym językiem funkcjonalnym: http://blogs.msdn.com/ashleyf/archive/2007/04/11/xslt-a-pure-functional-language.aspx

 2
Author: Robert Hedrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-11 19:15:30