Article View: pl.comp.lang.c
Article #247163Re: ile czasu trzeba aby sie nauczyc c++?
From: godek.maciek
Date: Sat, 22 Apr 2017 07:43
Date: Sat, 22 Apr 2017 07:43
78 lines
8153 bytes
8153 bytes
W dniu sobota, 22 kwietnia 2017 08:39:33 UTC+2 użytkownik (fir) napisał:
> chodzi o zwykla kompilacje
Aha, czyli np. coś takiego:
(define (compile expression result)
(match expression
((<*> a b)
(let ((a+ (name a))
(b+ (name b)))
`(,@(compile a a+)
,@(compile b b+)
(,result = ,a+ ,<*> ,b+))))
(_
'())))
gdzie "name" to coś co zwraca nam nową nazwę dla wyrażenia
(chyba że samo wyrażenie już jest nazwą, to wtedy zwraca to wyrażenie):
(define name
(let ((counter 0))
(λ (original)
(cond ((symbol? original)
original)
(else
(set! counter (+ counter 1))
(string->symbol (string-append "t"
(number->string counter))))))))
na przykład
(compile '(+ (* a b) (/ c d)) 'result)
zwraca
((t1 = a * b)
(t2 = c / d)
(result = t1 + t2))
> czyli przerobienie tekstu na tekst;
No, ściśle rzecz biorąc chodzi i przerobienie struktury na inną strukturę.
W Lispie szczególne jest to, że wyraża strukturę bezpośrednio,
w sposób jawny i niezawoalowany. (To, co zwróciła moja funkcja,
jest listą trójelementową, choć oczywiście zapisaną w postaci tekstowej)
rzecz w tym, że programista Lispa woli unikać bezsensownych problemów
(takich jak parsowanie czy serializacja), niż rozwiązywać je setki
razy w różnych kontekstach na różne sposoby.
na cholere mam wymyślać różne głupie składnie, jakieś XMLe, pliki
ini, JSONy, YMLe, żeby przechowywać dane, czy różne składnie w rodzaju
Pythona, C, (o zgrozo) C++ itp, do zapisu kodu, skoro to wszystko
jest zasadniczo równoważne temu, co mogę wrazić w lispie?
> wydaje sie ze w tej dziedzinie jakis jezyk ktory
> nie jest tak jak c ufundowany na bajtach i cyklach
> (c moze nie jest dokladnie ufundowany na bajtach i cyklach,
> ale 'ma je w pamieci') a bardziej na jakims
> rozbiorze gramatycznym czy czyms pokrewnym,
> (czyli w sumie cos lispopodobnego moze) bylby tu lepszy
jest lepszy. ogólnie do przetwarzania struktur programy funkcyjne
są dużo lepsze. Lisp jest moim faworytem, ale w dziedzinie
metaprogramowania na pewno ML ma duże tradycje, no i Haskell
> jak sobie wyobrazam mogloby to dzialac, byla by jakas funkcja 'reduce' ktora bralaby string z wyrazeniem dzilila go na pod wyrazenia i wywolywala sama siebie na podwyrazeniach az dodtarla by to wyrazen z dwoma operatorami ktore moglaby juz zredukowac (czyli pozamianiac na te wpisy t1=a*b ) - to mialoby szanse chyba byc krotkie ale nie chce mi sie co prawda za bardzo nad tym myslec - aczkolwiek bylaby dobra okazja pomyslec w czym taki kod bylby podobny a w czym rozny od kodu w c
tzn. samą ideę można też oczywiście zaimplementować w C, bo
w C można tworzyć funkcje rekurencyjne. tyle że trzeba by było
zaimplementować listy jednokierunkowe (co oczywiście jest łatwe,
ale nie jest trywialne w takim sensie, jak w językach funkcyjnych),
a także operacje na tych listach (np. łączenie dwóch list),
no i oczywiście zastanowić się, jak reprezentować atomy języka
(tzn. symbole i liczby) [zwyczajowo pewnie jako jakąś otagowaną
unię przechowującą wskaźnik na stringa albo wartość liczbową
wyrażenia]
Technical Details
Message-ID:
<97ff795d-dd77-4832-9916-0ad6233d5752@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!t52no2964875qtb.0!news-out.google.com!v18ni878ita.0!nntp.google.com!c26no336298itd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<451e90e7$0$17965$f69f905@mamut2.aster.pl> <b1e91861-9e4f-4b2e-be9f-b9a47ca8d719@googlegroups.com> <58e14e55$0$5152$65785112@news.neostrada.pl> <50630553-5585-4c79-b204-10decc20648f@googlegroups.com> <93ccf1ff-6c50-4308-ba33-d7e593ffaeb0@googlegroups.com> <almarsoft.2018019733568017445@news.v.pl> <16c707cc-51c1-49fe-8d99-28670469a954@googlegroups.com> <780c3784-e9ed-44e6-b983-ba04d778a9c4@googlegroups.com> <6eb4f9c1-4016-43fc-8003-1484e904aa9b@googlegroups.com> <5af86780-9446-45cd-8776-b83b3f14296e@googlegroups.com> <64803b60-0828-4ab8-b089-d136c85e7b97@googlegroups.com> <0dd3c685-151a-4cea-b4c5-33131f9af96a@googlegroups.com> <d91506d3-d2e3-4d02-b1a0-99e3e334093c@googlegroups.com> <3c2f8fa5-6258-4186-8284-b3ba17b8a586@googlegroups.com> <f46c966a-4939-45df-8f10-7f9032139579@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.200.54.180 with SMTP id a49mr7967107qtc.45.1492847009143; Sat, 22 Apr 2017 00:43:29 -0700 (PDT) X-Received: by 10.157.6.166 with SMTP id 35mr363276otx.14.1492847009094; Sat, 22 Apr 2017 00:43:29 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!t52no2964875qtb.0!news-out.google.com!v18ni878ita.0!nntp.google.com!c26no336298itd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Sat, 22 Apr 2017 00:43:28 -0700 (PDT) In-Reply-To: <f46c966a-4939-45df-8f10-7f9032139579@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=46.186.72.252; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 46.186.72.252 References: <451e90e7$0$17965$f69f905@mamut2.aster.pl> <b1e91861-9e4f-4b2e-be9f-b9a47ca8d719@googlegroups.com> <58e14e55$0$5152$65785112@news.neostrada.pl> <50630553-5585-4c79-b204-10decc20648f@googlegroups.com> <93ccf1ff-6c50-4308-ba33-d7e593ffaeb0@googlegroups.com> <almarsoft.2018019733568017445@news.v.pl> <16c707cc-51c1-49fe-8d99-28670469a954@googlegroups.com> <780c3784-e9ed-44e6-b983-ba04d778a9c4@googlegroups.com> <6eb4f9c1-4016-43fc-8003-1484e904aa9b@googlegroups.com> <5af86780-9446-45cd-8776-b83b3f14296e@googlegroups.com> <64803b60-0828-4ab8-b089-d136c85e7b97@googlegroups.com> <0dd3c685-151a-4cea-b4c5-33131f9af96a@googlegroups.com> <d91506d3-d2e3-4d02-b1a0-99e3e334093c@googlegroups.com> <3c2f8fa5-6258-4186-8284-b3ba17b8a586@googlegroups.com> <f46c966a-4939-45df-8f10-7f9032139579@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <97ff795d-dd77-4832-9916-0ad6233d5752@googlegroups.com> Subject: Re: ile czasu trzeba aby sie nauczyc c++? From: godek.maciek@gmail.com Injection-Date: Sat, 22 Apr 2017 07:43:29 +0000 Lines: 140 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit