Article View: pl.comp.programming
Article #215799Re: "Najbardziej imponujący kod, jaki widziałem"
From: Maciej Sobczak
Date: Sat, 03 Aug 2019 19:51
Date: Sat, 03 Aug 2019 19:51
85 lines
5515 bytes
5515 bytes
> Czasem w radiu słyszę reklamy, że producent leku przeprowadził niezależne badania,
Ale ten producent wziął dane z niezależnego serwisu (Rosetta Code). Ty też możesz te dane stamtąd wziąć.
> Trochę też rozczarowuje brak APLa w ich rankingu
http://rosettacode.org/wiki/Category:Programming_Languages
Ja myślę, że tabelka by nie była czytelna, gdyby wszystkie języki tam uwzględnić.
> pewnie wyszłoby jeszcze krócej, niż Mathematica, i by się musieli tłumaczyć.
Gorzej. W tej dyskusji to LISP wyglądałby jeszcze biedniej.
> W każdym razie "krócej" nie zawsze znaczy "lepiej".
To prawda.
> > 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)
Dokładnie to samo można napisać o Wolframie (to jest ta "LISPowatość"). Przykładowo, cały notebook, cokolwiek by nie miał, zapisany na dysku jest jednym legalnym wyrażeniem.
[Nothing]
> Na pewno do zrozumienia wymagała
> - znajomości funkcji "map"
Bo akurat chciałem, żeby przykład był w stylu funkcjonalnym. Nie musiał być i nie musiało tam być funkcji map.
> - wiedzy o osobliwym zachowaniu wartości "Nothing"
Bo właśnie to chciałem zaprezentować. Da się też bez tej wiedzy, czyli gorzej. Da się nawet tak samo źle, jak w Twoim przykładzie. Wolfram to bardzo uniwersalny język, może nawet udawać gorsze języki. :-)
> Ł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".
No jak nie. Ja tam widzę pustą listę gdy warunek nie jest spełniony. Skąd mam wiedzieć, że pusta lista jest ignorowana przez append-map? Przecież mogła być też dodana do wyniku.
A gdybym jednak chciał dodać pustą listę do wyniku?
W Wolframie pusta lista i Nothing to dwie różne sprawy.
Przykładowo:
only[condition_, list_] := Map[
Function[x,
If[condition[x], x, {}] (* tutaj jest {} zamiast Nothing *)
],
list
]
only[EvenQ, {1, 2, 3, 4, 5, 6, 7}]
{{}, 2, {}, 4, {}, 6, {}}
Jest różnica, prawda? Jak tą różnicę uzyskać w Twoim przykładzie?
> Najwidoczniej dla mnie prostota jest ważniejsza od wygody (którą Ty tutaj nazywasz "użytecznością"), a dla Ciebie na odwrót.
Zgodziłbym się, gdyby Twoje przykłady były proste. Ale nie są.
[...]
> Zaprawieni programiści Lispa nazywają ten proces "rytuałem przejścia".
Rozumiem. Wspominałeś już to określenie, ale wcześniej nie zrozumiałem. Czyli "rytuał przejścia" to sytuacja, kiedy ktoś bez sukcesu próbuje usprawnić język i ostatecznie rezygnuje z tego, wracając do języka bez usprawnień.
A jest jakaś fajna nazwa na sytuację, kiedy ktoś bez sukcesu próbuje usprawnić język i ostatecznie rezygnuje z tego i zmienia język na lepszy?
Nie wiem - rytuał wyjścia? odejścia? rozejścia?
Musi być jakaś fajna nazwa.
> Być może sytuacja z Mathematiką ma się nieco inaczej, bo ona ma już wokół siebie stosunkowo dużą społeczność.
To pewnie ludzie po rytuale wyjścia z LISPa. :-D
W porównaniu do poprzednich postów, w których próbowałeś wykazać, że nikt z tego nie korzysta, zauważam pozytywną zmianę.
--
Maciej Sobczak * http://www.inspirel.com
Technical Details
Message-ID:
<cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no9721161qtq.0!news-out.google.com!a5ni1053qtd.0!nntp.google.com!b26no9721150qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<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>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:137c:: with SMTP id d28mr15921189qkl.351.1564861872299; Sat, 03 Aug 2019 12:51:12 -0700 (PDT) X-Received: by 2002:ae9:ef48:: with SMTP id d69mr94358470qkg.313.1564861872138; Sat, 03 Aug 2019 12:51:12 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no9721161qtq.0!news-out.google.com!a5ni1053qtd.0!nntp.google.com!b26no9721150qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Sat, 3 Aug 2019 12:51:11 -0700 (PDT) In-Reply-To: <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.108.152.51; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S NNTP-Posting-Host: 213.108.152.51 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> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> Subject: Re: "Najbardziej imponujący kod, jaki widziałem" From: Maciej Sobczak <see.my.homepage@gmail.com> Injection-Date: Sat, 03 Aug 2019 19:51:12 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit