-
11. Data: 2014-11-09 20:35:48
Temat: Re: Makra w jezyku Scheme
Od: firr <p...@g...com>
W dniu niedziela, 9 listopada 2014 20:28:15 UTC+1 użytkownik g...@g...com
napisał:
> W dniu niedziela, 9 listopada 2014 19:52:10 UTC+1 użytkownik firr napisał:
>
> > spoko, chcesz to mozna troche jeszcze o tym pogadac - co do tego wyzej to jako
tako rozumiem drzewkową składnie (ktora jest fajna)
> > - jako tako tez ta węzową formę - głowa i argumenty (zawsze tak jest? czy zcasem
sa jakies inne wariacje?)
>
> jezeli idzie o reprezentacje list/drzew, to to jest w ogolnosci bardzo
> ciekawe zagadnienie. pare lat temu Guy Steele mial wyklad na ten
> temat w kontekscie paralelizacji obliczen: http://vimeo.com/6624203
>
> z cala pewnoscia z operatywnego punktu widzenia podzial na glowe i ogon
> jest bardzo wygodny, choc uzywanie list laczonych jest w ogolnosci dosc
> niewydajne (np. ze wzgledu na liniowy czas dostepu do elementow)
>
> w przypadku makr nie ma to zazwyczaj szczegolnego znaczenia, bo one sa i tak
> wykonywane w trakcie kompilacji wyrazenia (choc oczywiscie ktos moglby stworzyc
> jakies makro, ktore dzialaloby skrajnie niewydajnie)
>
> > - nie bardzo kojarze jednak to quote, po co to sie moze przydac jesli w miejscu
programu gdzie mial byc kod pojawia sie takie nieinterpretowalne symbole to nie bedze
syntax error?
>
> nie. symbole sa w lispie jednym z podstawowych typow danych, podobnie jak
> np. stringi w javascripcie.
>
> dlatego kiedy piszesz
>
> : x
>
> to ewaluator probuje podstawic wartosc zwiazana z symbolem (albo zglasza
> blad, jezeli symbol jest niezwiazany), za to jesli piszesz
>
> : (quote x)
>
> czy tez
>
> : 'x
>
> to otrzymujesz symbol "x"
>
> podobnie, kiedy piszesz
>
> (+ 2 3)
>
> to interpreter ewaluuje to wyrazenie do liczby 5, ale jesli napiszesz
>
> '(+ 2 3)
>
> to wartoscia tego wyrazenia bedzie lista, ktorej pierwszym
> elementem jest symbol "+", drugim liczba 2, a trzecim liczba 3
>
>
> przy okazji ciekawostka: o ile wyrazenia '2 i '3 dadza w wyniku
> liczby 2 i 3 (czyli zachowaja sie tak samo, ja wyrazenia 2 i 3),
> o tyle ''2 i ''3 dadza w wyniku listy
>
> (quote 2)
>
> i
>
> (quote 3)
>
> (czyli listy, ktorych pierwszym elementem jest symbol "quote", a drugim
> liczba)
>
> Analogicznie, ''x da w wyniku liste
>
> (quote x)
mimo twojej zauwazalnie ponadprzecietnej inteligencji powiem ci ze tutor to z ciebie
jest slaby - mozesz odpowiedziec mi na jedno pytanie zwiazane z quote? - rozumiem ze
to co jest produkowane przez quote (co moze byc pojedyncza lista czy moze byc cala
wielka galezia kodu?) dalej jest konsumowane przez jakis tam pozostaly kod, bo bez
tej wlasnie konsumpcji bylby syntaz error?
-?
tak pytam zeby zrozumiec jak to dziala
-
12. Data: 2014-11-09 20:52:49
Temat: Re: Makra w jezyku Scheme
Od: A.L. <a...@a...com>
On Sun, 9 Nov 2014 11:08:50 -0800 (PST), g...@g...com wrote:
>
>Pisalem skrypt w emacsie zgodnie ze specyfikacja org. To taka ciut
>sformalizowana specyfikacja plikow tekstowych (czesto uzywana np. do
>formatowania plikow tekstowych na githubie). Tryb emacsa daje mozliwosc
>generowania z tego LaTeXa (przyznam, ze pdfa wyprodukowalem na szybko,
>nie bardzo wglebiajac sie w rozne opcje)
Publikacje w LaTeXu najlepiej pisac w LaTeXu. Jest pare ogolnie
dostepnych przetwornikow z LaTeXu do HTML
A.L.
-
13. Data: 2014-11-09 21:51:16
Temat: Re: Makra w jezyku Scheme
Od: g...@g...com
W dniu niedziela, 9 listopada 2014 20:35:49 UTC+1 użytkownik firr napisał:
>
> mimo twojej zauwazalnie ponadprzecietnej inteligencji powiem ci ze tutor to z
ciebie jest slaby
dziekuje, staram sie :)
> - mozesz odpowiedziec mi na jedno pytanie zwiazane z quote? - rozumiem ze to co
jest produkowane przez quote (co moze byc pojedyncza lista czy moze byc cala wielka
galezia kodu?) dalej jest konsumowane przez jakis tam pozostaly kod, bo bez tej
wlasnie konsumpcji bylby syntaz error?
Nie. To, co jest produkowane, to jest po prostu symbol albo lista,
i moze byc dalej przetwarzane przez program tak, jak kazda inna lista.
Nie musi byc przez nic konsumowane -- moze byc np. zachowane do zmiennej,
przekazywane do funkcji, albo zwyczajnie ignorowane.
Dlatego zamiast pisac
(list 1 2 3)
mozna rownie dobrze napisac
'(1 2 3)
> -?
> tak pytam zeby zrozumiec jak to dziala
:) spoks
rzeczywiscie, operator quote nie ma swojego odpowiednika w zadnym
innym znanym mi jezyku programowania poza lispami (choc slyszalem,
ze w jezykach elixir i julia sa jakies odpowiedniki, ale nigdy
w to glebiej nie wnikalem), dlatego ta koncepcja moze byc
na poczatku nieco trudna do zrozumienia
czesto zdarzalo mi sie slyszec w tym kontekscie mantre o tym, ze
"kod to dane"
-
14. Data: 2014-11-09 22:05:01
Temat: Re: Makra w jezyku Scheme
Od: g...@g...com
W dniu niedziela, 9 listopada 2014 20:35:49 UTC+1 użytkownik firr napisał:
> tak pytam zeby zrozumiec jak to dziala
pomyslalem sobie, ze moze Ci ulatwic, jesli na biezaco bedziesz mogl
sobie testowac rozne wyrazenia.
tutaj jest interpreter scheme'a w javascripcie:
http://blackboard.biwascheme.org/
(chociaz nie ma w nim wszystkiego, to jego funkcjonalnosc wystarczy
do uruchomienia dotychczasowych przykladow)
-
15. Data: 2014-11-09 22:51:08
Temat: Re: Makra w jezyku Scheme
Od: "Jordan Szubert" <u...@j...us.to>
Dnia 09-11-2014 o 22:05:01 <g...@g...com> napisał(a):
> W dniu niedziela, 9 listopada 2014 20:35:49 UTC+1 użytkownik firr
> napisał:
>> tak pytam zeby zrozumiec jak to dziala
>
> pomyslalem sobie, ze moze Ci ulatwic, jesli na biezaco bedziesz mogl
> sobie testowac rozne wyrazenia.
>
> tutaj jest interpreter scheme'a w javascripcie:
>
> http://blackboard.biwascheme.org/
>
> (chociaz nie ma w nim wszystkiego, to jego funkcjonalnosc wystarczy
> do uruchomienia dotychczasowych przykladow)
a na http://www.biwascheme.org/ jest REPL, co może być wygodniejsze
--
Jordan Szubert
-
16. Data: 2014-11-09 22:58:08
Temat: Re: Makra w jezyku Scheme
Od: g...@g...com
W dniu niedziela, 9 listopada 2014 22:51:11 UTC+1 użytkownik Jordan Szubert napisał:
> > tutaj jest interpreter scheme'a w javascripcie:
> >
> > http://blackboard.biwascheme.org/
> >
> > (chociaz nie ma w nim wszystkiego, to jego funkcjonalnosc wystarczy
> > do uruchomienia dotychczasowych przykladow)
>
> a na http://www.biwascheme.org/ jest REPL, co może być wygodniejsze
rzeczywiscie do nauki podstaw REPL moze byc lepszy, jednak zdecydowalem
sie dac linka do blackboarda, bo z pobieznych testow wyniknelo, ze
interpreter z REPLem nie obsluguje makr, a interpreter w blackboardzie
obsluguje define-macro
-
17. Data: 2014-11-09 23:36:54
Temat: Re: Makra w jezyku Scheme
Od: firr <p...@g...com>
no dobra peostsze pytanie ;o
co sie stanie jesli w takim czyms
(+ (+ 1 2 3) (+ 1 2 3 4)) z drugiego
zrobisz 'quote' ? wydaje mi sie ze
to bedzie syntax (runtime?) error
o tyle wydawalo mi sie ze te quoty moga
byc tylko produkowane w jakichs kontekstach gdzie otaczajacy kod przyjmuje na wejsciu
wlasnie jakies tam kody (bo czym jest ta zawartosc quote? kodem chyba?)
-
18. Data: 2014-11-10 01:06:02
Temat: Re: Makra w jezyku Scheme
Od: g...@g...com
W dniu niedziela, 9 listopada 2014 23:36:54 UTC+1 użytkownik firr napisał:
> no dobra peostsze pytanie ;o
> co sie stanie jesli w takim czyms
>
> (+ (+ 1 2 3) (+ 1 2 3 4)) z drugiego
> zrobisz 'quote' ?
tzn. chodzi o to, co sie stanie, gdy napiszemy
(+ (+ 1 2 3) '(+ 1 2 3 4))?
wtedy dostaniemy type error, bo nie mozna dodac liczby do listy.
ale gdybysmy napisali
(append '(+ 1 2 3) '(+ 1 2 3 4))
[gdzie "append" to funkcja ktora laczy listy]
to dostalibysmy sensowny wynik
(+ 1 2 3 + 1 2 3 4)
analogicznie, nie mozemy jednak uzyc funkcji "append" na liczbach.
wywolanie
(append 1 2)
rowniez spowoduje blad typu
> wydaje mi sie ze
> to bedzie syntax (runtime?) error
> o tyle wydawalo mi sie ze te quoty moga
> byc tylko produkowane w jakichs kontekstach
> gdzie otaczajacy kod przyjmuje na wejsciu wlasnie
> jakies tam kody (bo czym jest ta zawartosc quote? kodem chyba?)
tzn. na te rzecz mozna patrzec dwojako.
z jednej strony mozna powiedziec, ze kiedy piszesz
'(+ 2 3), to faktycznie mozna widziec (+ 2 3) jako
kod. Jednak mozna tez spojrzec na te kwestie na odwrot,
mianowicie tak, ze (+ 2 3) jest lista, ktora zostaje
ewaluowana.
zachecam zebys sprawdzil tego repla, bo wtedy bedziesz mogl
na biezaco testowac rozne hipotezy
-
19. Data: 2014-11-10 08:53:30
Temat: Re: Makra w jezyku Scheme
Od: firr <p...@g...com>
W dniu poniedziałek, 10 listopada 2014 01:06:04 UTC+1 użytkownik g...@g...com
napisał:
> W dniu niedziela, 9 listopada 2014 23:36:54 UTC+1 użytkownik firr napisał:
> > no dobra peostsze pytanie ;o
> > co sie stanie jesli w takim czyms
> >
> > (+ (+ 1 2 3) (+ 1 2 3 4)) z drugiego
> > zrobisz 'quote' ?
>
> tzn. chodzi o to, co sie stanie, gdy napiszemy
> (+ (+ 1 2 3) '(+ 1 2 3 4))?
>
> wtedy dostaniemy type error, bo nie mozna dodac liczby do listy.
>
> ale gdybysmy napisali
>
> (append '(+ 1 2 3) '(+ 1 2 3 4))
>
> [gdzie "append" to funkcja ktora laczy listy]
> to dostalibysmy sensowny wynik
>
> (+ 1 2 3 + 1 2 3 4)
>
> analogicznie, nie mozemy jednak uzyc funkcji "append" na liczbach.
> wywolanie
>
> (append 1 2)
>
> rowniez spowoduje blad typu
>
> > wydaje mi sie ze
> > to bedzie syntax (runtime?) error
> > o tyle wydawalo mi sie ze te quoty moga
> > byc tylko produkowane w jakichs kontekstach
> > gdzie otaczajacy kod przyjmuje na wejsciu wlasnie
> > jakies tam kody (bo czym jest ta zawartosc quote? kodem chyba?)
>
> tzn. na te rzecz mozna patrzec dwojako.
> z jednej strony mozna powiedziec, ze kiedy piszesz
> '(+ 2 3), to faktycznie mozna widziec (+ 2 3) jako
> kod. Jednak mozna tez spojrzec na te kwestie na odwrot,
> mianowicie tak, ze (+ 2 3) jest lista, ktora zostaje
> ewaluowana.
>
> zachecam zebys sprawdzil tego repla, bo wtedy bedziesz mogl
> na biezaco testowac rozne hipotezy
chyba nie mam sily (ostatnio na nic nie mam sily) bo scheme sie interesuje tylko
przygodnie - aczkolwiek i w ten sposob tanim kosztem mozna sie troche wdrożyc w
temat, bo np teraz mi sie troche rozjasnilo
mozesz powiedziec mmi moze jeszcze
> (append '(+ 1 2 3) '(+ 1 2 3 4))
> (+ 1 2 3 + 1 2 3 4)
1) tutaj dodajemy dwa cytaty czy wynik nie powinien byc tez cytatem, czy tu na pewno
to jest nie cytat tylko takie wyrazenie?
2) co dalej mozna zrobic z czyms takim
> (+ 1 2 3 + 1 2 3 4)
? to jak rozumiem sie chyba nie moze wykonac?
-
20. Data: 2014-11-10 09:15:03
Temat: Re: Makra w jezyku Scheme
Od: g...@g...com
W dniu poniedziałek, 10 listopada 2014 08:53:33 UTC+1 użytkownik firr napisał:
> > zachecam zebys sprawdzil tego repla, bo wtedy bedziesz mogl
> > na biezaco testowac rozne hipotezy
>
> chyba nie mam sily (ostatnio na nic nie mam sily) bo scheme sie interesuje tylko
przygodnie - aczkolwiek i w ten sposob tanim kosztem mozna sie troche wdrożyc w
temat, bo np teraz mi sie troche rozjasnilo
to jak juz uznasz, ze wszystko rozumiesz, to bym Cie jeszcze poprosil,
zebys opowiedzial o tym w taki sposob, dzieki ktoremu Twoim zdaniem
zrozumialbys to szybciej, bo moze wtedy i ja sie czegos naucze odnosnie
tego, jak nalezy wyjasniac takie rzeczy :)
> mozesz powiedziec mmi moze jeszcze
>
> > (append '(+ 1 2 3) '(+ 1 2 3 4))
>
> > (+ 1 2 3 + 1 2 3 4)
>
>
> 1) tutaj dodajemy dwa cytaty czy wynik nie powinien byc tez cytatem, czy tu na
pewno to jest nie cytat tylko takie wyrazenie?
nie
cytat to jest pewne wyrazenie, natomiast wynik cytowania to w tym
przypadku po prostu lista. Ewaluator albo zjada jednego quote'a
i wypuwa dane, albo dokonuje ewaluacji wyrazenia zgodnie z normalnymi
regulami, jesli nie ma quote'a.
funkcja poniekad komplementarna jest funkcja "eval". w pewnym uproszczeniu
zapis (eval '(+ 1 2)) jest rownowazny zapisowi (+ 1 2). eval to funkcja
ktora interpretuje swoj argument jako kod w lispie.
analogicznie, zapis (eval ''(+ 1 2)) odpowiada zapisowi '(+ 1 2)
(podobna funkcja "eval" jest np. w javascripcie, tylko ze tam
ewaluuje sie stringi, natomiast w lispie -- struktury danych,
tj. drzewa symboli. dlatego funkcja "eval" w javascripcie musi
dodatkowo przeparsowac kod, a w lispie nie)
> 2) co dalej mozna zrobic z czyms takim
>
> > (+ 1 2 3 + 1 2 3 4)
>
> ? to jak rozumiem sie chyba nie moze wykonac?
nie moze, bo nie mozna dodac funkcji do liczby.
mozna z tym robic to wszystko, co mozna zrobic
z kazda inna lista, np.
(filter number? '(+ 1 2 3 + 1 2 3 4))
===> (1 2 3 1 2 3 4)
(filter symbol? '(+ 1 2 3 + 1 2 3 4))
===> (+ +)
oczywiscie przyklad jest bardzo abstrakcyjny