-
Data: 2019-08-02 14:10:13
Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie 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?
Następne wpisy z tego wątku
- 03.08.19 06:52 AK
- 03.08.19 09:55 g...@g...com
- 03.08.19 21:51 Maciej Sobczak
- 04.08.19 00:37 g...@g...com
- 04.08.19 22:57 Maciej Sobczak
- 05.08.19 12:44 g...@g...com
- 05.08.19 14:35 Roman Tyczka
- 05.08.19 14:58 g...@g...com
- 05.08.19 22:29 Maciej Sobczak
- 06.08.19 10:55 Maciej Sobczak
- 06.08.19 15:31 Borneq
- 06.08.19 15:45 g...@g...com
- 06.08.19 16:32 Borneq
- 06.08.19 16:39 g...@g...com
- 06.08.19 16:57 Borneq
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-21 Zgromadzenie użytkowników pojazdów :-)
- 2025-01-21 bateria na żądanie
- 2025-01-21 Warszawa => IT Business Analyst <=
- 2025-01-21 Warszawa => IT Assets Manager <=
- 2025-01-21 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=
- 2025-01-20 Białystok => Delphi Programmer <=
- 2025-01-20 Białystok => User Experience Designer <=
- 2025-01-20 Katowice => UX Designer <=
- 2025-01-20 Wrocław => Specjalista ds. Sprzedaży <=
- 2025-01-20 Białystok => Solution Architect (Java background) <=
- 2025-01-20 Szczecin => Senior Field Sales (system ERP) <=
- 2025-01-21 e-doręczenia
- 2025-01-20 Zbieranie podpisów przed sklepem
- 2025-01-20 cenzura internetu
- 2025-01-20 ulaskawienie