eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › "Najbardziej imponujący kod, jaki widziałem"
Ilość wypowiedzi w tym wątku: 42

  • 31. Data: 2019-08-06 22:57:57
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    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.


  • 32. Data: 2019-08-07 09:39:51
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > > 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.

    Nie mam z tym problemu. Interpunkcja w Wolframie nie jest bardziej rozbudowana, niż
    powiedzmy w C++ a dla purystów (lub, co ważniejsze, automatycznych parserów i
    generatorów) wszystko ma dostępną tzw. pełną formę, zgodną ze schematem
    head[e1,e2,...].
    Czyli idomatyczny zapis zawierający lambdę i mapowanie, np.:

    #^2& /@ {1,2,3,4}

    jest równoważny:

    Map[Function[x, x^2], {1,2,3,4}]

    ze spodziewanym wynikiem {1,4,9,16}.

    To jest też zaletą Wolframa w stosunku do innych języków, które takich
    ustandaryzowanych zapisów nie umożliwiają i wymuszają swoją mniej lub bardziej
    cyrkową interpunkcję każdemu, kto tego języka używa. Ja w Wolframie mam wybór i
    stosuję skrócone zapisy tam i w takim zakresie, w jakim uznaję to za użyteczne. Ocena
    zależy też od tego, jaką żywotność ma mieć kod - projekt dłogofalowy i eksperymenty
    "na kolanie" to dwie różne sprawy (powyższy przykład to oczywiście ta druga
    kategoria). Fajnie, że Wolfram potrafi się dopasować do obu tych zastosowań.
    Warto też zauważyć, że przy programowaniu w stylu funkcjonalnym wystarczy tylko kilka
    skrótów (lambda, mapy, transformacje), żeby spektakuralnie wpłynąć na ilość pisanego
    kodu. Te kilka skrótów to idiomy, które pojawiają się regularnie w dokumentacji i
    przykładach Wolframa, więc ich znajomość zdobywa się bardzo wcześnie. To nie jest
    poziom ekspercki.
    Zobacz na pierwsze dwa przykłady tutaj:

    https://reference.wolfram.com/language/ref/Map.html

    Nie da się znać jednego i nie znać drugiego. To jest tak jak mała i wielka litery 'a'
    oraz 'A'.

    > > Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?
    >
    > Nie wyszło. Ale nadal wyszło mniej, niż powinno.

    A kto decyduje, ile powinno? Mathematica jest narzędziem wysokopoziomowym.

    > 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.

    Wręcz przeciwnie. Rozumiem jeszcze gorzej, bo nie pokazałeś żadnej wady takiego
    rozwiązania. W Mathematice mam dostępne wszystkie opcje: mogę sięgnąć po gotową
    funkcję gdy chcę mieć od ręki gotowy wynik lub samemu napisać sobie algorytm, gdy
    chcę się wykazać rozumieniem tego jak działa. W tym drugim przypadku mogę stosować
    zapisy o różnym poziomie rygoru składniowego, żeby osiągnąć oczekiwane właściwości
    kodu. We wszystkich przypadkach jest albo krócej albo czytelniej (albo oba!), niż w
    dyskutowanych tutaj alternatywach.

    Która z tych cech ma u mnie powodować "niechęć do środowisk programistycznych o
    zamkniętym kodzie"? Bo ja na skutek naszych dyskusji tylko się utwierdzam w
    przekonaniu, że Wolfram to bardzo dobra inwestycja.

    > 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.

    Ale przecież napisanie własnego algorytmu jest tu utrudnieniem, bo odwraca uwagę
    kompilatora od właściwego celu. Rozwiązaniem jest właśnie zestaw funkcji
    wysokopoziomowych - takich jak EditDistance czy inny SequenceAlignment. Tam są te
    optymalizacje, z których chcesz skorzystać.

    Tzn. ja chcę. :-)

    --
    Maciej Sobczak * http://www.inspirel.com


  • 33. Data: 2019-08-07 10:09:09
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > Czyli idomatyczny zapis zawierający lambdę i mapowanie, np.:
    >
    > #^2& /@ {1,2,3,4}
    >
    > jest równoważny:
    >
    > Map[Function[x, x^2], {1,2,3,4}]

    Przepraszam, to jeszcze nie pokazuje istoty zagadnienia. Można jeszcze bardziej
    purystycznie (prościej?):

    Map[Function[x, Power[x,2]], List[1,2,3,4]]

    Czy ta wersja jest czytelniejsza? To zależy, kto czyta. Na pewno dla automatu jest
    najlepsza (i wewnętrznie tak właśnie widać wszystkie wyrażenia, więc
    metaprogramowanie i przetwarzanie symboliczne odbywa się na takim poziomie), ale
    człowiek potrafi korzystać ze skrótów. A jak widać jest ich w tym przykładzie nawet
    więcej, niż się na początku wydawało.

    --
    Maciej Sobczak * http://www.inspirel.com


  • 34. Data: 2019-08-07 11:10:45
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu środa, 7 sierpnia 2019 10:09:10 UTC+2 użytkownik Maciej Sobczak napisał:
    > > Czyli idomatyczny zapis zawierający lambdę i mapowanie, np.:
    > >
    > > #^2& /@ {1,2,3,4}
    > >
    > > jest równoważny:
    > >
    > > Map[Function[x, x^2], {1,2,3,4}]
    >
    > Przepraszam, to jeszcze nie pokazuje istoty zagadnienia. Można jeszcze bardziej
    purystycznie (prościej?):
    >
    > Map[Function[x, Power[x,2]], List[1,2,3,4]]
    >
    > Czy ta wersja jest czytelniejsza? To zależy, kto czyta.

    To jest problem z pojęciem czytelności, że jest niedookreślone.
    Ale ta wersja korzysta z mniejszej ilości reguł, które "czysty umysł" potencjalnego
    czytelnika musi sobie przyswoić, żeby móc ją zrozumieć.
    I to akurat nie zależy od tego, kto czyta.
    (No, chyba że ktoś by twierdził, że ludzie od razu się rodzą ze zdolnością do
    parsowania zapisu #^2& jako funkcji anonimowej. Ale np. moje osobiste doświadczenie
    falsyfikuje owo twierdzenie)

    Być może użycie "list comprehensions" byłoby dla różnych osób czytelniejsze, tzn. coś
    jak

    [x^2 | x <- {1,2,3,4}]

    > Na pewno dla automatu jest najlepsza (i wewnętrznie tak właśnie widać wszystkie
    wyrażenia, więc metaprogramowanie i przetwarzanie symboliczne odbywa się na takim
    poziomie), ale człowiek potrafi korzystać ze skrótów.

    Automat też potrafi korzystać ze skrótów. Automatowi naprawdę jest wszystko jedno.
    Automat zrobi wszystko, do czego go zaprogramujesz.

    Moje pytanie jest takie, czy ta pierwsza wersja rzeczywiście ma jakąś znaczącą
    przewagę nad tą ostatnią - na tyle znaczącą, żeby uzasadniała komplikowanie reguł
    dotyczących notacji.

    Moim zdaniem nie. Zdaniem Wolframa (i Twoim chyba także) najwidoczniej tak.

    Piszesz powyżej, że "interpunkcja w Wolframie nie jest bardziej skomplikowana, niż w
    C++", ale ze znanych mi języków C++ ma niewątpliwie najbardziej skomplikowaną
    składnię (na tyle skomplikowaną, że sami jego twórcy sobie z nim nie radzą)


  • 35. Data: 2019-08-07 14:02:28
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > > Map[Function[x, Power[x,2]], List[1,2,3,4]]
    >
    > Ale ta wersja korzysta z mniejszej ilości reguł, które "czysty umysł" potencjalnego
    czytelnika musi sobie przyswoić, żeby móc ją zrozumieć.

    Bez przesady. W odróżnieniu od komputerów, człowiek nie musi "zarządzać" regułami,
    które zna. W szczególności znaczkologia, którą zna nawet ze szkoły podstawowej jest
    znacznie bardziej skomplikowana - dlatego dla większości ludzi zapis x^2 jest od razu
    czytelny, podczas gdy Power[x,2] budzi podejrzenia o jakiś podstęp, pomimo tego, że
    "korzysta z mniejszej ilości reguł". Podobnie jest z nawiasami, czy w ogóle z
    operatorami.
    Dlatego też to:

    a*x^2 + b*x + c

    jest czytelniejsze, niż to:

    Plus[c, Times[b, x], Times[a, Power[x, 2]]]

    W pewnej optymalnej ilości skróty są więc czytelniejsze i naturalniejsze.

    > Być może użycie "list comprehensions" byłoby dla różnych osób czytelniejsze, tzn.
    coś jak
    >
    > [x^2 | x <- {1,2,3,4}]

    Żaden postęp w stosunku do zwykłego mapowania. To jest nadmiarowa notacja. Jeśli dla
    kogoś czytelna, fajnie, ale posługując się Twoim własnym argumentem, wymaga
    znajomości większej liczby reguł. I ma bardzo ograniczone zastosowania.

    > Automat też potrafi korzystać ze skrótów. Automatowi naprawdę jest wszystko jedno.
    Automat zrobi wszystko, do czego go zaprogramujesz.

    Ale właśnie w przypadku automatu ja chcę, żeby był jak najprostszy. Bo wtedy spędze
    mniej czasu na jego programowaniu.

    > Moje pytanie jest takie, czy ta pierwsza wersja rzeczywiście ma jakąś znaczącą
    przewagę nad tą ostatnią - na tyle znaczącą, żeby uzasadniała komplikowanie reguł
    dotyczących notacji.

    Tak. Jest prostsza dla tych, co znają znaczki. Dokładnie tak samo, jak z wielomianem
    kwadratowym ze szkoły z powyższego przykładu.

    > Moim zdaniem nie. Zdaniem Wolframa (i Twoim chyba także) najwidoczniej tak.

    Błąd. Ja korzystam z *obu* wersji. Zależnie od tego, która jest w danym kontekście
    bardziej efektywna.
    Znaczy - w każdym kontekście moja efektywność może być optymalna. :-)

    > Piszesz powyżej, że "interpunkcja w Wolframie nie jest bardziej skomplikowana, niż
    w C++", ale ze znanych mi języków C++ ma niewątpliwie najbardziej skomplikowaną
    składnię

    Więc wiem, że będzie łatwiej. :-P

    --
    Maciej Sobczak * http://www.inspirel.com


  • 36. Data: 2019-08-07 16:43:35
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu środa, 7 sierpnia 2019 14:02:30 UTC+2 użytkownik Maciej Sobczak napisał:
    > > > Map[Function[x, Power[x,2]], List[1,2,3,4]]
    > >
    > > Ale ta wersja korzysta z mniejszej ilości reguł, które "czysty umysł"
    potencjalnego czytelnika musi sobie przyswoić, żeby móc ją zrozumieć.
    >
    > Bez przesady. W odróżnieniu od komputerów, człowiek nie musi "zarządzać" regułami,
    które zna. W szczególności znaczkologia, którą zna nawet ze szkoły podstawowej jest
    znacznie bardziej skomplikowana - dlatego dla większości ludzi zapis x^2 jest od razu
    czytelny, podczas gdy Power[x,2] budzi podejrzenia o jakiś podstęp

    Całkowicie się nie zgadzam.
    Nigdy nie miałem w szkole wprowadzanego zapisu x^2.
    W języku C ^ oznacza operację xor.
    W Pythonie (i zdaje się że FORTRANie też) do potęgowania używa się operatora **.
    Użycie symbolu ^ do wyrażenia potęgowania jest może uznane przez garstkę osób
    piszących w raczej niszowych językach.

    > pomimo tego, że "korzysta z mniejszej ilości reguł". Podobnie jest z nawiasami, czy
    w ogóle z operatorami.

    No właśnie. Ile godzin spędziliśmy w szkole, przyzwyczajając się do tej notacji?

    > Dlatego też to:
    >
    > a*x^2 + b*x + c
    >
    > jest czytelniejsze, niż to:
    >
    > Plus[c, Times[b, x], Times[a, Power[x, 2]]]

    Tzn. chyba chciałeś powiedzieć, że Tobie wydaje się czytelniejsze, a nie "jest
    czytelniejsze", bo to ostatnie określenie nawet nie do końca wiadomo, co znaczy.


    > W pewnej optymalnej ilości skróty są więc czytelniejsze i naturalniejsze.

    Może raczej "w pewnych bardzo szczególnych okolicznościach".
    W innych np. [a, b, c] będzie lepszą reprezentacją wielomianu, który powyżej
    zapisałeś.

    Zresztą notacja matematyczna ma to do siebie, że jest zoptymalizowana względem dość
    specyficznego celu, mianowicie łatwości manipulacji formułami na papierze albo
    tablicy. Łatwiej jest zapisać "x", bo to tylko dwa ruchy ręką, niż, dajmy na to,
    "ilość" (czy cokolwiek chcemy wyrazić przy pomocy tej liczby)

    > > Być może użycie "list comprehensions" byłoby dla różnych osób czytelniejsze, tzn.
    coś jak
    > >
    > > [x^2 | x <- {1,2,3,4}]
    >
    > Żaden postęp w stosunku do zwykłego mapowania. To jest nadmiarowa notacja. Jeśli
    dla kogoś czytelna, fajnie, ale posługując się Twoim własnym argumentem, wymaga
    znajomości większej liczby reguł. I ma bardzo ograniczone zastosowania.

    Tak samo jak /@ jest nadmiarową notacją.
    List comprehensions mają jednak pewną przewagę nad map. Przy pomocy map nie napiszesz
    czegoś takiego:

    [(x, y, z) | x <- [1 .. 100], y <- [1 .. 100], z <- [1 .. 100], x^2+y^2==z^2]


    > > Automat też potrafi korzystać ze skrótów. Automatowi naprawdę jest wszystko
    jedno. Automat zrobi wszystko, do czego go zaprogramujesz.
    >
    > Ale właśnie w przypadku automatu ja chcę, żeby był jak najprostszy. Bo wtedy spędze
    mniej czasu na jego programowaniu.

    A w przypadku człowieka dlaczego nie chcesz, żeby był jak najprostszy?

    > > Moje pytanie jest takie, czy ta pierwsza wersja rzeczywiście ma jakąś znaczącą
    przewagę nad tą ostatnią - na tyle znaczącą, żeby uzasadniała komplikowanie reguł
    dotyczących notacji.
    >
    > Tak. Jest prostsza dla tych, co znają znaczki. Dokładnie tak samo, jak z
    wielomianem kwadratowym ze szkoły z powyższego przykładu.

    Zrobiłem ankietę na Twitterze. Jak do tej pory zagłosowały 32 osoby.
    Wygląda na to, że spośród nich zgadza się z Tobą dokładnie 0 osób.

    https://twitter.com/PaniczGodek/status/1159029909672
    603648

    > > Moim zdaniem nie. Zdaniem Wolframa (i Twoim chyba także) najwidoczniej tak.
    >
    > Błąd. Ja korzystam z *obu* wersji. Zależnie od tego, która jest w danym kontekście
    bardziej efektywna.
    > Znaczy - w każdym kontekście moja efektywność może być optymalna. :-)

    Cały czas nie znam kontekstu, w którym ta druga notacja z haszami i małpami byłaby
    efektywniejsza.


  • 37. Data: 2019-08-07 22:32:22
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > Całkowicie się nie zgadzam.
    > Nigdy nie miałem w szkole wprowadzanego zapisu x^2.

    No tak. Bo widzisz - w Mathematice ten zapis wygląda dokładnie tak jak w szkole.
    Natomiast po skopiowaniu go do grup dyskusyjnych jest x^2, bo w okienku, gdzie pisze
    tego posta, jest tylko taki font i nie ma superscriptu.

    > Użycie symbolu ^ do wyrażenia potęgowania jest może uznane przez garstkę osób
    piszących w raczej niszowych językach.

    https://en.wikipedia.org/wiki/Exponentiation#In_prog
    ramming_languages

    MATLAB, Wolfram, R, Excel, Analytica, TeX, "most computer algebra systems".

    "Garstka osób w niszowych językach", tak? Łomatko...
    Sami użytkownicy Excela pewnie przykryliby liczebnie fanów wszystkich innych
    zapisów... Pozostali to ludzie zajmujący się profesjonalnie inżynierią i matematyką.
    Niech będzie, że to nieistotna garstka.

    > No właśnie. Ile godzin spędziliśmy w szkole, przyzwyczajając się do tej notacji?

    Nie ważne ile. Ważne, że to była inwestycja, na której można bezpiecznie budować.
    Programiści nie startują od zera i zwykle są to ludzie z jakimś istniejącym już
    fundamentem intelektualnym. No chyba że robimy język dla kosmitów, jak w filmach
    sci-fi i zakładamy, że odbiorca nie kuma kompletnie nic.

    > List comprehensions mają jednak pewną przewagę nad map. Przy pomocy map nie
    napiszesz czegoś takiego:
    >
    > [(x, y, z) | x <- [1 .. 100], y <- [1 .. 100], z <- [1 .. 100], x^2+y^2==z^2]

    To, że w Twoim ulubionym języku nie napiszę, to jest Twój problem a nie mój. :-)

    Map[
    Function[triple,
    Apply[Function[{x, y, z}, If[x^2 + y^2 == z^2, {x, y, z}, Nothing]], triple]
    ],
    Tuples[Range[100], 3]
    ]

    Nieco dłużej, ale Ty osiągnąłeś limit swojego zapisu a moja mapa nawet się nie
    rozgrzała.
    W tym przypadku jednak nie użyłbym mapy, bo to jest system z ograniczeniami a nie
    transformacja i od mapy lepszy jest filtr:

    Cases[Tuples[Range[100], 3], {x_, y_, z_} /; x^2 + y^2 == z^2]

    Nawet działa >2x szybciej. I tak bym to zostawił.

    > A w przypadku człowieka dlaczego nie chcesz, żeby był jak najprostszy?

    Bo polegam na tym, co człowiek już wie ze szkoły. To jest koszt, który już został
    poniesiony, więc mogę z niego za darmo skorzystać.

    > Zrobiłem ankietę na Twitterze. Jak do tej pory zagłosowały 32 osoby.
    > Wygląda na to, że spośród nich zgadza się z Tobą dokładnie 0 osób.

    Ale znasz tą teorię psychologiczną, że otaczamy się ludźmi, którzy potwierdzają nasze
    poglądy (bo innych nie lubimy, więc nie chcemy ich mieć w kręgu znajomych)? Wiesz, co
    by wyszło, gdyby Wolfram taką ankietę zrobił na swoim profilu?

    > Cały czas nie znam kontekstu, w którym ta druga notacja z haszami i małpami byłaby
    efektywniejsza.

    Problem w tym (podobnie jak w wielu poprzednich tematach), że nie da się ustawić
    obiektywnej granicy pomiędzy znaczkami rozsądnymi a nierozsądnymi. Od nawiasów, przez
    podstawowe operatory, po strzałki po hasze i małpy. Dla Ciebie małpa jest
    nieczytelna, dla kogoś innego nieczytelny będzie znak plusa.

    Granica czytelności jest subiektywna i zależy od... kręgu znajomych.

    --
    Maciej Sobczak * http://www.inspirel.com


  • 38. Data: 2019-08-08 00:44:30
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: AK <n...@n...net>

    On 2019-08-03 09:55, g...@g...com wrote:
    > W dniu sobota, 3 sierpnia 2019 06:52:44 UTC+2 użytkownik AK napisał:
    >
    >>> No np. tak (z pattern-matcherem Shinna/Wrighta):
    >>>
    >>> (let (((abc ... y z) some-list))
    >>> `(,@abc ,z ,y))
    >>
    >> O ja pieprnicze.. No rzeczywiscie "prosto"...
    >
    > Dla ignoranta nawet zwykłe dodawanie będzie wyglądało jak czarna magia.
    >
    > Jeżeli uważasz, że umiesz prościej, to pokaż, a jeśli nie, to lepiej zachowaj
    > takie światłe uwagi dla siebie.

    vec[-2], vec[-1] = vec[-1], vec[-2]

    Tak sie to robi w _normalnym_ jezyku programowania, a nie jakies szmuje
    buje z kompletnie nieczytelnym pattern matchingiem do tak prostackiej
    wrecz operacji.

    AK


  • 39. Data: 2019-08-08 09:06:59
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > vec[-2], vec[-1] = vec[-1], vec[-2]
    >
    > Tak sie to robi w _normalnym_ jezyku programowania

    W Wolframie jest nieco dłużej:

    {vec[[-2]], vec[[-1]]} = {vec[[-1]], vec[[-2]]}

    ale idea jest zachowana. Tak czy inaczej chodzi o fundament: lista musi być strukturą
    liniową z dostępem swobodnym a nie jakąś rekurencyjną matrioszką.

    Niektóre języki odróżniają listy od tablic pod względem tego swobodnego dostępu, ale
    to jest rozróżnienie niskopoziomowe, przydatne powiedzmy w C/C++ lub w Adzie, ale
    kompletnie nieużyteczne w takich językach jak Python czy Wolfram.

    --
    Maciej Sobczak * http://www.inspirel.com


  • 40. Data: 2019-08-08 17:44:16
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: AK <n...@n...net>

    On 2019-08-08 09:06, Maciej Sobczak wrote:
    >> vec[-2], vec[-1] = vec[-1], vec[-2]
    >>
    >> Tak sie to robi w _normalnym_ jezyku programowania
    >
    > W Wolframie jest nieco dłużej:
    >
    > {vec[[-2]], vec[[-1]]} = {vec[[-1]], vec[[-2]]}

    Dopuszczalnie. Nie ma o co kopii kruszyc (choc Wolframa nie lubie
    bo zbyt Lispowaty i malo obiektowy - ale dobrze - j.w. - ze nie
    "dogmatycznie" Lispowaty). Jest czytelne.

    > ale idea jest zachowana. Tak czy inaczej chodzi o fundament: lista musi być
    strukturą liniową z dostępem swobodnym a nie jakąś rekurencyjną matrioszką.

    Janiej/trafniej juz nie mozna :)

    >
    > Niektóre języki odróżniają listy od tablic pod względem tego swobodnego dostępu,
    ale to jest rozróżnienie niskopoziomowe, przydatne powiedzmy w C/C++ lub w Adzie, ale
    kompletnie nieużyteczne w takich językach jak Python czy Wolfram.

    No niekoniecznie. Tzn "metodycznie" masz racje, ale wydajnosciowo
    juz mniej. W Pythonie istnieje standardowa struktura typu tablice
    - array() - o okreslonym i i stalym (w przeciwienstwie do list) -
    typie danych, czyli zdecydowanie wydajniejsza ok (linked)list,
    Oczywiscie obluga obu jest taka sama/bardzo podobna.

    PS: Nalezy tez wspomniec o numpy arays.

    AK

strony : 1 ... 3 . [ 4 ] . 5


Szukaj w grupach

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: