🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #247163

Re: ile czasu trzeba aby sie nauczyc c++?

#247163
From: godek.maciek
Date: Sat, 22 Apr 2017 07:43
78 lines
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-mail
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>

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