eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming"Najbardziej imponujący kod, jaki widziałem" › Re: "Najbardziej imponujący kod, jaki widziałem"
  • X-Received: by 2002:a0c:8690:: with SMTP id 16mr99408099qvf.228.1564747813787; Fri,
    02 Aug 2019 05:10:13 -0700 (PDT)
    X-Received: by 2002:a0c:8690:: with SMTP id 16mr99408099qvf.228.1564747813787; Fri,
    02 Aug 2019 05:10:13 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net
    !2.eu.feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!
    peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer
    02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!b26no5255115qtq.0!n
    ews-out.google.com!a5ni916qtd.0!nntp.google.com!b26no5255107qtq.0!postnews.goog
    le.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 2 Aug 2019 05:10:13 -0700 (PDT)
    In-Reply-To: <d...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.25.232.40;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 83.25.232.40
    References: <e...@g...com>
    <1...@g...com>
    <c...@g...com>
    <0...@g...com>
    <b...@g...com>
    <d...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <2...@g...com>
    Subject: Re: "Najbardziej imponujący kod, jaki widziałem"
    From: g...@g...com
    Injection-Date: Fri, 02 Aug 2019 12:10:14 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 8757
    X-Received-Body-CRC: 2316340827
    Xref: news-archive.icm.edu.pl pl.comp.programming:213741
    [ ukryj nagłówki ]

    W dniu piątek, 2 sierpnia 2019 10:32:21 UTC+2 użytkownik Maciej Sobczak napisał:
    > > Spróbuj przełożyć konstrukcję Byrda i Friedmana na język Wolframa.
    > > Sam z chęcią zobaczę, jaki będzie efekt.
    >
    > Normalnie mi się nie chce, mam inne zainteresowania.
    > Ale gdybym miał jakoś wesprzeć swój argument, to tutaj jest jakaś tabelka:
    >
    > https://blog.wolfram.com/2012/11/14/code-length-meas
    ured-in-14-languages/
    >
    > Z jakiejś statystyki wyszło, że programy w CommonLisp (to chyba najbliższy przykład
    do tej dyskusji) są ~6 razy dłuższe, niż w Wolframie. Nie wiem, czy ta statystyka
    rozciąga się też na Twoje przykłady, ale nie widzę powodu, żeby nie.

    Czasem w radiu słyszę reklamy, że producent leku przeprowadził niezależne badania, z
    których wynika, że ich produkt jest najlepszy. Nie przekonują mnie, tak samo jak
    powyższe statystyki (zresztą wiadomo, jak to jest ze statystykami).

    Trochę też rozczarowuje brak APLa w ich rankingu - pewnie wyszłoby jeszcze krócej,
    niż Mathematica, i by się musieli tłumaczyć.

    W każdym razie "krócej" nie zawsze znaczy "lepiej". Kiedyś przekomarzałem się na ten
    temat z Jonem Harropem. Zadanie polegało na tym, żeby napisać program
    przekształcający program używający rekurencji do takiego, który używa Y-kombinatora.
    O jego rozwiązaniu faktycznie można powiedzieć, że było krótsze, ale było też
    zdecydowanie mniej czytelne.

    Archiwa dyskusji (wraz z rozwiązaniem w Mathematice) można sobie poczytać tutaj:
    https://www.quora.com/Why-is-Haskell-not-homoiconic/
    answer/Jon-Harrop-2/comment/31109325
    natomiast moje roziązanie w Schemie (wraz z nieco bardziej szczegółowym wyjaśnieniem)
    można znaleźć tu:
    https://github.com/panicz/master-thesis/blob/master/
    chapters/B.tex

    > > Lisp nie jest doskonałą notacją, ale to pewnie dlatego, że nie ma czegoś takiego,
    jak "doskonała notacja". Za to do meta-programowania jest najlepszą notacją, jaką
    znam.
    >
    > A dlaczego akurat do meta-programowania jest najlepsza?

    Chyba dlatego, że ma najmniejszą możliwą liczbę reguł, dzięki czemu składnia jest
    jednocześnie formatem serializacji (i to lżejszym od np. JSONa)

    > > Nadal nie rozumiem. Jaka rzeźba z par? Jak chcesz tworzyć listę elementów a, b,
    c, to piszesz po prostu (list a b c) albo '(a b c).
    >
    > Ładnie i wygodnie. To jak np. zamienić miejscami elementy ostatni z przedostatnim?

    No np. tak (z pattern-matcherem Shinna/Wrighta):

    (let (((abc ... y z) some-list))
    `(,@abc ,z ,y))

    > [Nothing]
    > > No, dla mnie to od początku brzmiało jak ficzer, którego lepiej udawać, że nie
    ma.
    >
    > Dlaczego? Bardzo fajny. Zwłaszcza jak się go zwraca z funkcji wywołanej w jakiejś
    pętli. Nie muszę wtedy usuwać "pustych" elementów w dodatkowym kroku.
    > Właśnie dlatego moja funkcja "only" była krótsza (i czytelniejsza) od Twojej w
    LISPie. Stąd się biorą potem takie tabelki, jak ta z linku powyżej.

    Nie powiedziałbym, żeby była czytelniejsza.
    Na pewno do zrozumienia wymagała
    - znajomości funkcji "map"
    - wiedzy o osobliwym zachowaniu wartości "Nothing"

    Łatwo jest zdefiniować "only" przy pomocy "append-map" (czy flatMap, czy concatMap,
    jak zwał tak zwał)

    (define (only satisfying? elements)
    (append-map (lambda (element)
    (if (satisfying? element)
    `(,element)
    '()))
    elements))

    Wygląda prawie tak samo, jak Twoja, tylko nie trzeba wymyślać "specjalnych elementów"
    o "magicznych właściwościach" i "niejasnym statusie ontycznym".

    > > > Rozumiem. Czyli do programowania w LISPie potrzeby jest Haskell
    > >
    > > Ale co w tym złego?
    >
    > Zależy, jakie masz cele w życiu. Język, który nie pozwala skupić się na problemie,
    nie pomaga.

    No w omawianym przypadku cel miałem raczej jasny: zaprezentowanie idei "uruchamiania
    ewaluatora wstecz".
    Ale inna okoliczność, przy której składnia Lispa była nieodzowna, to np. system
    Boyera-Moore'a do dowodzenia twierdzeń o programach.

    > > (do wartości składni Wolframa nie jestem przekonany)
    >
    > To ciekawe, bo mój znajomy mówi, że Wolfram mu się nie podoba, bo jest za bardzo
    LISPowaty. :-)
    > I ja się z nim zgadzam, że Wolfram jest LISPowaty. Tylko że on jest LISPowaty tylko
    w takim stopniu, w jakim jest to użyteczne.

    Najwidoczniej wynika to stąd, że różne rzeczy są dla nas ważne.
    Najwidoczniej dla mnie prostota jest ważniejsza od wygody (którą Ty tutaj nazywasz
    "użytecznością"), a dla Ciebie na odwrót.
    Dla mnie prostota jest wartością dlatego, że te różne przygodne udogodnienia, które
    Wolfram dodaje do składni Lispa, z punktu widzenia meta-programowania wcale nie są
    udogodnieniami, tylko wręcz przeciwnie.

    Każdy początkujący programista Lispa z łatwością doda sobie do niego różne
    udogodnienia składniowe, a jeśli będzie miał nieco więcej uporu, może zaimplementuje
    nawet pełną składnię Mathematiki w czytniku Lispa.

    A później dostrzeże, że tego rodzaju "udogodnienia" stwarzają barierę między nim a
    resztą świata, bo składnia Lispa jest dostatecznie dobra (a jeśli korzysta się z
    wyspecjalizowanych narzędzi, jest nawet dużo lepsza), i jego wysiłki tylko
    wprowadzają chaos komunikacyjny.

    Zaprawieni programiści Lispa nazywają ten proces "rytuałem przejścia".

    Być może sytuacja z Mathematiką ma się nieco inaczej, bo ona ma już wokół siebie
    stosunkowo dużą społeczność.

    > > > > Inna rzecz - czy pattern matching musi być podstawą w Wolframie?
    > >
    > > Czyli musi.
    >
    > Ale co w tym złego?

    To samo, co w tym, że w danym języku nie da się zdefiniować swojego własnego "if"-a.
    Moim zdaniem absolutnie nic, ale to Ty rozpocząłeś ten wątek, więc powiedz: co w tym
    złego?

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: