Article View: pl.comp.programming
Article #215808Re: "Najbardziej imponujący kod, jaki widziałem"
From: Maciej Sobczak
Date: Wed, 07 Aug 2019 07:39
Date: Wed, 07 Aug 2019 07:39
48 lines
5733 bytes
5733 bytes
> > myDistance[s1_, s2_] := Total[
> > Min[#] + Max[#] & /@
> > Cases[SequenceAlignment[s1, s2], a_List :> StringLength /@ a]
> > ]
> >
> > Pozwoliłem sobie użyć skróconych (idiomatycznych) zapisów na podstawowe operacje mapowania i lambdy - skoro w innych językach są śmieszne znaczki, to ja też skorzystam.
>
> No właśnie, i to mi się nie podoba.
Nie mam z tym problemu. Interpunkcja w Wolframie nie jest bardziej rozbudowana, niż powiedzmy w C++ a dla purystów (lub, co ważniejsze, automatycznych parserów i generatorów) wszystko ma dostępną tzw. pełną formę, zgodną ze schematem head[e1,e2,...].
Czyli idomatyczny zapis zawierający lambdę i mapowanie, np.:
#^2& /@ {1,2,3,4}
jest równoważny:
Map[Function[x, x^2], {1,2,3,4}]
ze spodziewanym wynikiem {1,4,9,16}.
To jest też zaletą Wolframa w stosunku do innych języków, które takich ustandaryzowanych zapisów nie umożliwiają i wymuszają swoją mniej lub bardziej cyrkową interpunkcję każdemu, kto tego języka używa. Ja w Wolframie mam wybór i stosuję skrócone zapisy tam i w takim zakresie, w jakim uznaję to za użyteczne. Ocena zależy też od tego, jaką żywotność ma mieć kod - projekt dłogofalowy i eksperymenty "na kolanie" to dwie różne sprawy (powyższy przykład to oczywiście ta druga kategoria). Fajnie, że Wolfram potrafi się dopasować do obu tych zastosowań.
Warto też zauważyć, że przy programowaniu w stylu funkcjonalnym wystarczy tylko kilka skrótów (lambda, mapy, transformacje), żeby spektakuralnie wpłynąć na ilość pisanego kodu. Te kilka skrótów to idiomy, które pojawiają się regularnie w dokumentacji i przykładach Wolframa, więc ich znajomość zdobywa się bardzo wcześnie. To nie jest poziom ekspercki.
Zobacz na pierwsze dwa przykłady tutaj:
https://reference.wolfram.com/language/ref/Map.html
Nie da się znać jednego i nie znać drugiego. To jest tak jak mała i wielka litery 'a' oraz 'A'.
> > Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?
>
> Nie wyszło. Ale nadal wyszło mniej, niż powinno.
A kto decyduje, ile powinno? Mathematica jest narzędziem wysokopoziomowym.
> Jeżeli jest użyteczny, to super. Ale mam nadzieję, że teraz lepiej rozumiesz moją perspektywę i niechęć do środowisk programistycznych o zamkniętym kodzie.
Wręcz przeciwnie. Rozumiem jeszcze gorzej, bo nie pokazałeś żadnej wady takiego rozwiązania. W Mathematice mam dostępne wszystkie opcje: mogę sięgnąć po gotową funkcję gdy chcę mieć od ręki gotowy wynik lub samemu napisać sobie algorytm, gdy chcę się wykazać rozumieniem tego jak działa. W tym drugim przypadku mogę stosować zapisy o różnym poziomie rygoru składniowego, żeby osiągnąć oczekiwane właściwości kodu. We wszystkich przypadkach jest albo krócej albo czytelniej (albo oba!), niż w dyskutowanych tutaj alternatywach.
Która z tych cech ma u mnie powodować "niechęć do środowisk programistycznych o zamkniętym kodzie"? Bo ja na skutek naszych dyskusji tylko się utwierdzam w przekonaniu, że Wolfram to bardzo dobra inwestycja.
> Zresztą moim ideałem jest, żeby to kompilator szukał za mnie gotowych implementacji, żebym mógł korzystać z gotowych optymalizacji, które ktoś zrobił za mnie.
Ale przecież napisanie własnego algorytmu jest tu utrudnieniem, bo odwraca uwagę kompilatora od właściwego celu. Rozwiązaniem jest właśnie zestaw funkcji wysokopoziomowych - takich jak EditDistance czy inny SequenceAlignment. Tam są te optymalizacje, z których chcesz skorzystać.
Tzn. ja chcę. :-)
--
Maciej Sobczak * http://www.inspirel.com
Technical Details
Message-ID:
<6dfc0a33-10bc-4915-836a-4bf4e57cd88f@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin1!goblin.stu.neva.ru!b26no8254644qtq.0!news-out.google.com!e17ni2839qtg.1!nntp.google.com!b26no8254643qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> <b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com> <10218256-a88b-4be5-9815-723d2b757225@googlegroups.com> <ae20996a-1fd5-44dc-a39e-e627c633cc06@googlegroups.com> <e8792740-b3b1-48c6-917f-1dfb1fe8bab1@googlegroups.com> <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com> <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a0c:b998:: with SMTP id v24mr6813741qvf.132.1565163592243; Wed, 07 Aug 2019 00:39:52 -0700 (PDT) X-Received: by 2002:a0c:b50c:: with SMTP id d12mr6808708qve.70.1565163592091; Wed, 07 Aug 2019 00:39:52 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin1!goblin.stu.neva.ru!b26no8254644qtq.0!news-out.google.com!e17ni2839qtg.1!nntp.google.com!b26no8254643qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Wed, 7 Aug 2019 00:39:51 -0700 (PDT) In-Reply-To: <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.70; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S NNTP-Posting-Host: 165.225.84.70 References: <edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> <b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com> <10218256-a88b-4be5-9815-723d2b757225@googlegroups.com> <ae20996a-1fd5-44dc-a39e-e627c633cc06@googlegroups.com> <e8792740-b3b1-48c6-917f-1dfb1fe8bab1@googlegroups.com> <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com> <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <6dfc0a33-10bc-4915-836a-4bf4e57cd88f@googlegroups.com> Subject: Re: "Najbardziej imponujący kod, jaki widziałem" From: Maciej Sobczak <see.my.homepage@gmail.com> Injection-Date: Wed, 07 Aug 2019 07:39:52 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit