tag:blogger.com,1999:blog-20941681.post2639000939639466853..comments2024-02-13T18:09:44.121+01:00Comments on Jacek Laskowski scala jawnie: Dojrzewam funkcyjnie z Clojure, a nawet udzielam pomocy!Anonymoushttp://www.blogger.com/profile/09734540973692423017noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-20941681.post-52222980090791958712010-09-10T01:26:40.883+02:002010-09-10T01:26:40.883+02:00Wracając do tematu "mierzenia". Za pomoc...Wracając do tematu "mierzenia". Za pomocą samego Clojure łatwo sprawdzić dla analizowanego kodu, że najlepiej wypada użycie samego map, funkcji anonimowych i... makra (') zamiast funkcji (list):<br />user=> (dotimes [_ 3] (time (mapcat #(list (* % 2)) (concat [1 2] '(3) [4 5]))))<br />"Elapsed time: 0.254045 msecs"<br />"Elapsed time: 0.063877 msecs"<br />"Elapsed time: 0.062769 msecs"<br />nil<br />user=> (dotimes [_ 3] (time (mapcat #(list (* % 2)) (concat [1 2] (list 3) [4 5]))))<br />"Elapsed time: 0.259906 msecs"<br />"Elapsed time: 0.064793 msecs"<br />"Elapsed time: 0.064185 msecs"<br />nil<br />user=> (dotimes [_ 3] (time (map #(* % 2) (concat [1 2] (list 3) [4 5]))))<br />"Elapsed time: 0.16197 msecs"<br />"Elapsed time: 0.008715 msecs"<br />"Elapsed time: 0.008609 msecs"<br />nil<br />user=> (dotimes [_ 3] (time (map #(* % 2) (concat [1 2] '(3) [4 5]))))<br />"Elapsed time: 0.155737 msecs"<br />"Elapsed time: 0.007609 msecs"<br />"Elapsed time: 0.007154 msecs"<br />nil<br />user=> (dotimes [_ 3] (time (map (partial * 2) (concat [1 2] (list 3) [4 5]))))<br />"Elapsed time: 0.070294 msecs"<br />"Elapsed time: 0.009677 msecs"<br />"Elapsed time: 0.009397 msecs"<br />nil<br />user=> (dotimes [_ 3] (time (map (partial * 2) (concat [1 2] '(3) [4 5]))))<br />"Elapsed time: 0.064385 msecs"<br />"Elapsed time: 0.008744 msecs"<br />"Elapsed time: 0.008306 msecs"<br />nilMarcin Rzewuckihttps://www.blogger.com/profile/07173745050584105385noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-12916946612137418652010-09-03T13:38:19.211+02:002010-09-03T13:38:19.211+02:00Właśnie, czyli więcej przemawia na korzyść funkcji...Właśnie, czyli więcej przemawia na korzyść funkcji map :)Marcin Rzewuckihttps://www.blogger.com/profile/07173745050584105385noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-50856480763766167222010-09-03T13:20:12.561+02:002010-09-03T13:20:12.561+02:00Marcin: uniwersalna odpowiedź na pytanie o wydajno...Marcin: uniwersalna odpowiedź na pytanie o wydajność brzmi "zmierz." W Fablo używamy YourKit do profilowania kodu Clojurowego; działa zupełnie dobrze.<br /><br />Samo map pewnie będzie szybsze, bo nie musi robić concat :)Danielhttps://www.blogger.com/profile/18133712104945008367noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-50464860979802539672010-09-03T12:58:53.278+02:002010-09-03T12:58:53.278+02:00w REPL jest dokładnie tak samo. Mnożenie przez 2 z...w REPL jest dokładnie tak samo. Mnożenie przez 2 zastosowane dla każdego elementu z kolekcji. Obydwie funkcje (map i mapcat) działają w różny sposób - mapcat wykonuje najpierw map, a potem concat. Rezultat jest ten sam. Czy w przypadku tych dwóch funkcji można mówić o pewnej różnicy w wydajności czy jest to tylko kwestia estetyki kodu ?Marcin Rzewuckihttps://www.blogger.com/profile/07173745050584105385noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-56274470556971772472010-09-02T11:22:53.129+02:002010-09-02T11:22:53.129+02:00(2 4 6 8 10)
prościej: (map #(* % 2) (concat [1 2...(2 4 6 8 10)<br /><br />prościej: (map #(* % 2) (concat [1 2] (list 3) [4 5]))<br />lub: (map (partial * 2) (concat [1 2] (list 3) [4 5]))<br /><br />;; nie sprawdzałem w replu, mogę się mylić.Danielhttps://www.blogger.com/profile/18133712104945008367noreply@blogger.com