🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215792

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

#215792
From: godek.maciek
Date: Fri, 02 Aug 2019 12:10
92 lines
7687 bytes
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-measured-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?
Technical Details
Message-ID: <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com>
Path: mbox-mo1.pugleaf.net!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!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!b26no5255115qtq.0!news-out.google.com!a5ni916qtd.0!nntp.google.com!b26no5255107qtq.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>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:1116:: with SMTP id o22mr91661812qkk.82.1564747814077;        Fri, 02 Aug 2019 05:10:14 -0700 (PDT)
X-Received: by 2002:a0c:8690:: with SMTP id 16mr99408099qvf.228.1564747813787; Fri, 02 Aug 2019 05:10:13 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!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!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!b26no5255115qtq.0!news-out.google.com!a5ni916qtd.0!nntp.google.com!b26no5255107qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Fri, 2 Aug 2019 05:10:13 -0700 (PDT)
In-Reply-To: <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.25.232.40; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 83.25.232.40
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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com>
Subject: Re: "Najbardziej imponujący kod, jaki
 widziałem"
From: godek.maciek@gmail.com
Injection-Date: Fri, 02 Aug 2019 12:10:14 +0000
X-Received-Bytes: 8757
X-Received-Body-CRC: 2316340827
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit