eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming"Najbardziej imponujący kod, jaki widziałem"Re: "Najbardziej imponujący kod, jaki widziałem"
  • Data: 2019-08-06 22:57:57
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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/SequenceA
    lignment.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/Distanc
    eAndSimilarityMeasures.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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: