🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215807

Re: "Najbardziej imponujący kod, jaki widziałem"

#215807
From: godek.maciek
Date: Tue, 06 Aug 2019 20:57
65 lines
6210 bytes
W dniu wtorek, 6 sierpnia 2019 10:55:05 UTC+2 użytkownik Maciej Sobczak napisał:

> > Jeżeli masz jakieś pytania na temat mojej osobowości, to lepiej zapytaj
> 
> Nie da się. W tym zakresie nikt nie potrafi się sam zdiagnozować, muszę więc polegać na swoich (subiektywnych) odczuciach.

Szczerze powiedziawszy, jeżeli idzie o poznawanie ludzi, to mamy cały arsenał środków o wiele lepszych niż swoje subiektywne odczucia. Zresztą nawet to, w jaki sposób chcemy kategoryzować ludzi, czy wręcz sam fakt, że w ogóle chcemy ich kategoryzować, w większym stopniu świadczy o naszym własnym "kosmosie wewnętrznym", niż o tych osobach.

Serio. Jeżeli masz jakieś wątpliwości co do moich motywacji, to nic nie stoi na przeszkodzie, żeby przed wydaniem osądu zapytać. Z mojego doświadczenia odbiór tekstu potrafi się drastycznie różnić od intencji autora (kiedyś rozmawiałem z kolegą na czacie, i rozmowa poszła w takim kierunku, że prawie zaczęliśmy skakać sobie do gardeł. Kiedy porozmawialiśmy na żywo, okazało się, że jest luz)

> > > Prosta sprawa - zmodyfikuj rozwiązanie w Mathematice tak, żeby koszt zamiany elementu wynosił 2 a nie 1.
> > 
> > Pytanie jest fair i odpowiedź (również fair) jest taka: sam sobie policz.
> 
> OK, żeby nie było, że jestem nieuprzejmy, i dla własnej zabawy, zrobiłem mały research w tej sprawie.
> Jest taka fajna funkcja:
> 
> https://reference.wolfram.com/language/ref/SequenceAlignment.html
> 
> Ta funkcja rozpisuje różnice między sekwencjami, z czego można wyciągnąć poszczególne operacje (usunięcie, wstawienie, zamiana). Jeżeli dobrze zrozumiałem ćwiczenie, to rozwiązeniem może być takie coś:
> 
> 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. Widziałem w swoim życiu już takie wynalazki, i choć może przyspieszają nieznacznie samo pisanie, zdecydowanie utrudniają czytanie (i komplikują reguły użycia języka)

Kiedyś napisałem w Schemie takie rozwiązanie:


[define [edit-distance a b]
  [match `[,a ,b]
    [`[,a []]
     [length a]] ; insert all from a
    [`[[] ,b]
     [length b]] ; insert all from b
    [`[[,a0 . ,a*] [,b0 . ,b*]]
     [min [+ [edit-distance a* b] 1] ; delete a0
          [+ [edit-distance a b*] 1] ; delete b0
          [+ [edit-distance a* b*] ; replace or leave alone
             [if [equal? a0 b0] 0 2]]]]]]

Co prawda trzeba sobie przyswoić specjalne znaczenie przecinków i apostrofów, ale oprócz tego nie ma tu prawie nic oprócz nazywania i budowania/rozkładania struktur, a jedyne funkcje biblioteczne użyte w kodzie to min, length, + i equal?.

Struktura kodu blisko odzwierciedla matematyczną definicję z Wikipedii. Jak się zastosuje memoizację, to i szybkość działania tego programu nie jest tragiczna.

Pewnie w Mathematice można podobnie. Może nawet w jakimś sensie ładniej, bo nie trzeba tych przecinków i apostrofów. Ale też nie trzeba się w definicji odwoływać do tajemniczych funkcji, których zrozumienie samo w sobie jest wyzwaniem

[...]
> Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?

Nie wyszło. Ale nadal wyszło mniej, niż powinno.

> Nadal jednak szukałbym gotowych implementacji tutaj (choćby po to, żeby skorzystać z optymalizacji, które ktoś zrobił za mnie):
> 
> https://reference.wolfram.com/language/guide/DistanceAndSimilarityMeasures.html
> 
> I właśnie na tym polega użyteczność tego produktu.

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.

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.
Technical Details
Message-ID: <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no7113116qtq.0!news-out.google.com!a5ni1420qtd.0!nntp.google.com!b26no7113115qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
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>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:137c:: with SMTP id d28mr5175054qkl.351.1565125077551;        Tue, 06 Aug 2019 13:57:57 -0700 (PDT)
X-Received: by 2002:a37:4e92:: with SMTP id c140mr4775008qkb.48.1565125077389; Tue, 06 Aug 2019 13:57:57 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no7113116qtq.0!news-out.google.com!a5ni1420qtd.0!nntp.google.com!b26no7113115qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Tue, 6 Aug 2019 13:57:57 -0700 (PDT)
In-Reply-To: <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.248.215.4; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 37.248.215.4
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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com>
Subject: Re: "Najbardziej imponujący kod, jaki
 widziałem"
From: godek.maciek@gmail.com
Injection-Date: Tue, 06 Aug 2019 20:57:57 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit