-
X-Received: by 2002:a37:9b05:: with SMTP id d5mr169677qke.7.1546560813202; Thu, 03
Jan 2019 16:13:33 -0800 (PST)
X-Received: by 2002:a37:9b05:: with SMTP id d5mr169677qke.7.1546560813202; Thu, 03
Jan 2019 16:13:33 -0800 (PST)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.
iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!v55no34
7870qtk.0!news-out.google.com!h3ni13412qtk.1!nntp.google.com!v55no347864qtk.0!p
ostnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Thu, 3 Jan 2019 16:13:32 -0800 (PST)
In-Reply-To: <1...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.86;
posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 5.172.255.86
References: <c...@g...com>
<f...@g...com>
<a...@g...com>
<7...@g...com>
<a...@g...com>
<6...@g...com>
<0...@g...com>
<a...@g...com>
<1...@g...com>
<e...@g...com>
<6...@g...com>
<1...@g...com>
<2...@g...com>
<5...@g...com>
<9...@g...com>
<q0lcv9$abq$1@gioia.aioe.org>
<1...@g...com>
<4...@g...com>
<1...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0...@g...com>
Subject: Re: Jaki język polecić początkującemu? - komentarz do artykułu w
Programista 9/2018
From: fir <p...@g...com>
Injection-Date: Fri, 04 Jan 2019 00:13:33 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 209
Xref: news-archive.icm.edu.pl pl.comp.programming:213156
[ ukryj nagłówki ]W dniu czwartek, 3 stycznia 2019 22:21:26 UTC+1 użytkownik g...@g...com
napisał:
> W dniu czwartek, 3 stycznia 2019 21:51:47 UTC+1 użytkownik fir napisał:
> > W dniu czwartek, 3 stycznia 2019 18:20:04 UTC+1 użytkownik g...@g...com
napisał:
> > >
> > > Przykład, który lubię dawać na różnych prezentacjach, to program
> > > liczący sumę kwadratów początkowych siedmiu liczb pierwszych.
> > >
> > > Imperatywnie zapisalibyśmy go tak:
> > >
> > > 1: licznik := 7
> > > 2: liczba := 0
> > > 3: suma := 0
> > > 4: dopóki (licznik > 0):
> > > 5: jeżeli jest_pierwsza(liczba):
> > > 6: suma := suma + liczba^2
> > > 7: licznik := licznik - 1
> > > 8: liczba := liczba + 1
> > >
> > > i jeszcze musieli dopowiedzieć, że po wykonaniu programu
> > > wynik znajdziemy w zmiennej "suma".
> > >
> > > Natomiast przy podejściu funkcyjnym po prostu "formalizujemy"
> > > sformułowaine problemu: "suma kwadratów początkowych 7 liczb pierwszych"
> > > ma swoją strukturę gramatyczną, którą możemy uwypuklić, biorąc jednostki
> > > znaczeniowe w nawiasy:
> > >
> > > (suma (kwadraty (początkowe 7 liczby-pierwsze)))
> > >
> > > Teraz wystarczy nam wyjaśnić, co to jest (suma elementów)
> > > czym są (kwadraty elementów), co to jest (początkowe N elementy)
> > > i czym są liczby-pierwsze.
> > >
> > > To jest kod, który bardzo łatwo się komponuje, i który
> > > bardzo łatwo się czyta, testuje i analizuje (I nie trzeba wyjaśniać,
> > > gdzie należy szukać wyniku)
> > >
> > > wiadomo, że (o ile definicje pojęć są takie, jakich byśm oczekiwali) wyrażenie
> > >
> > > (suma (kwadraty (początkowe 7 liczby-pierwsze)))
> > >
> > > jest równoważne wyrażeniu
> > >
> > > (suma (kwadraty '(2 3 5 7 11 13)))
> > >
> > > które jest równoważne wyrażeniu
> > >
> > > (suma '(4 9 25 49 121 169))
> > >
> > > i tak dalej.
> > >
> > lol ale mozesz podac ten kod w lispie w postaci takiej kompletnosci jak ten
przyklad w pseudkodzie, by to rzeczywiscie porownac?
> >
> > bo to jest raczej istotnie
> >
> >
> > w c taki programik nie wyglada zbyt tragicznie
> >
> >
> > int PoliczSumeParuPoczatkowychLiczbPierwszych(int ilu)
> > {
> >
> > int dodano_pierwszych =0;
> > int suma = 0;
> >
> > for(int i=0;;i++)
> > {
> > if(jest_liczba_pierwsza(i))
> > {
> > suma+=i*i;
> > dodano_pierwszych++;
> > if(dodano_pierwszych==ilu) return suma;
> > }
> > }
> > }
> >
> > to ze nie wydziela on etapow na podej pierwsze, podnies do kwadratu zsumuj wynika
raczej z tego ze pisze sie to tak by dzialalo szybko.. jak ktos sie nie upiera by
bylo tak szybko moze podzielic na te fazy
> >
> >
> > chetnie bym zobaczyl taki kompletny progamik w tym lispie scheme czy co to tam
jest
>
> Ogólnie derywację tego programu mam dość dogłębnie opisaną
> w pierwszym rozdziale "Pamphletu":
> https://github.com/panicz/pamphlet/raw/master/pamphl
et.pdf
>
> W praktyce zapisałbym go raczej np. tak (jeżeli język
> wspierałby leniwą ewaluację):
>
> (sum (map square (initial 7 (only prime? numbers))))
>
> gdzie "map", "only" i "initial" są zdefiniowane tak:
>
jakos nie wyglada mi to na prostsze niz wersja w c
a co to jest tam wyzej sum square (inty?) prime? (funkcja?) i numbers (???)
nie wyglada to na prostsze od c (dlugie jakies) a w to ze to bedzie tak szybkie tez
nie do konca wierze ale powiedzmy ze to mniej istotne, przydaloby sie jednak by bylo
choc prostsze a nie wyglada
sam ten kod w c chyab w sumie mozna napisac prsciej
int PoliczSumeParuPoczatkowychLiczbPierwszych(int ilu)
{
int i = 0, dodano = 0, suma = 0;
for(;;)
if(jest_liczba_pierwsza(++i))
{
suma += i*i ;
if(++dodano==ilu) return suma;
}
}
to i tak jest przydlugie, niepodobaja mi sie zwlaszcza te niepotrzebne jakby
deklaracje.. no i jest trioche kryptyczne, no ale tak to sie pisze w c
> (define (map f list)
> (if (null? list)
> '()
> ;else
> (cons (f (first list)) (map f (rest list)))))
>
> (define (initial n elements)
> (if (= n 0)
> '()
> ;else
> (cons (first elements) (initial (- n 1) (rest elements))))))
>
> (define (only satisfying? elements)
> (if (null? elements)
> '()
> ;else
> (if (satisfying? (first elements))
> (cons (first elements) (only satisfying? (rest elements)))
> ;else
> (only satisfying? (rest elements)))))
>
> W Haskellu może jest nieco zwięźlej i czytelniej:
>
> map f [] = []
> map f (h:t) = (f h):(map f t)
>
> initial 0 elements = []
> initial n (first:rest) = first:(initial (n-1) rest)
>
> only satisfying [] = []
> only satisfying (first:rest) = if (satisfying first)
> then first:(only satisfying rest)
> else only satisfying rest
>
> Teraz, w języku z leniwą ewaluacją możemy zbudować nieskończoną listę liczb:
>
> (define (numbers-from n)
> (cons n (numbers-from (+ n 1))))
>
> (define numbers (numbers-from 0))
>
> albo w Haskellu:
>
> numbersFrom n = n:(numbersFrom (n+1))
>
> numbers = numbersFrom 0
>
> Sumę definiujemy następująco:
>
> (define (sum list)
> (if (null? list)
> 0
> ;else
> (+ (first list) (sum (rest list)))))
>
> albo w Haskellu:
>
> sum [] = 0
> sum (first:rest) = first + (sum rest)
>
> W jezyku bez leniwej ewaluacji jest nieco ciężej (ten wariant jest
> opisany w Pamphlecie)
>
> Jeżeli idzie o "wydajność", to kompilator Haskella wspiera technikę
> kompilacji zwaną "fuzją" albo "deforestacją", i efektywnie wynikowy
> kod będzie z grubsza równoważny temu, co Ty napisałeś (nie będą
> tworzone żadne dodatkowe struktury w pamięci, tylko będzie pętla
> iterująca po jakichś tam zmiennych)
Następne wpisy z tego wątku
- 04.01.19 02:00 AK
- 04.01.19 09:20 Maciej Sobczak
- 04.01.19 09:40 g...@g...com
- 04.01.19 10:25 AK
- 04.01.19 11:15 g...@g...com
- 04.01.19 12:50 AK
- 04.01.19 13:29 g...@g...com
- 04.01.19 13:34 fir
- 04.01.19 13:47 fir
- 04.01.19 13:52 g...@g...com
- 04.01.19 14:01 fir
- 04.01.19 14:12 g...@g...com
- 04.01.19 14:15 AK
- 04.01.19 14:16 fir
- 04.01.19 14:26 fir
Najnowsze wątki z tej grupy
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML