-
11. Data: 2012-05-16 05:19:04
Temat: Re: jezyki z definiowaniem operatorow
Od: " firr" <f...@g...pl>
Daniel Janus <n...@g...com> napisał(a):
> W dniu wtorek, 15 maja 2012 18:10:51 UTC+1 u=BFytkownik fir napisa=B3:
> > czy wystepuja jezyki z definiowaniem=20
> > operatorow (inne niz c++, gdzie zreszt=B1
> > to definiowanie jest bardzo ograniczone -
> > mozna sobie wyobrazic jezyk ze tak swobodnym=20
> > definiowaniem operatorow jak funkcji, moze
> > to skrociloby listingi choc trudno powiedziec)
>
> Co rozumiesz przez "definiowanie operator=F3w"?
>
> --D.
przez definiowanie operatorow rozumiem glownie
nadanie wywolaniom funkcji postaci operatorowej np
zamiast
print("this", "is", 4, "lisa") //funkcja print
print "this" "is" 4 "lisa" //operator print
float3 d = cross(cross(a,b),c) //funkcja cross
float3 d = a cross b cross c //operator cross
c = concatenate(a,b);
c = a concatenate b
itd
raczej nie ma z tym zasadniczego problemu, zastanawiam
sie nad ew konsekwencjami takiego czegos (bo wynikaja z tego
pewne ciekawe wnioski)
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
12. Data: 2012-05-16 07:41:13
Temat: Re: jezyki z definiowaniem operatorow
Od: " M.M." <m...@g...pl>
fir <f...@g...pl> napisał(a):
> czy wystepuja jezyki z definiowaniem
> operatorow (inne niz c++, gdzie zresztą
> to definiowanie jest bardzo ograniczone -
> mozna sobie wyobrazic jezyk ze tak swobodnym
> definiowaniem operatorow jak funkcji, moze
> to skrociloby listingi choc trudno powiedziec)
Czy ja wiem, czy to może istotnie skrócić listingi?
W moim odczuciu, poza nielicznymi wyjątkami, przeładowanie
operatorów tylko utrudnia parsowanie kodu w oczach. Wyjątki o
których mowa to np. zdefiniowanie operatora w standardowej/popularnej
bibliotece co powoduje że oczy każdego programisty dobrze
przywykły do ich używania.
Ostatnio w pewnym programie (C++) zdefiniowałem dwie "małe"
klasy. Jedna klasa obudowywała unsigned int, druga
unsigned long long. Przedefiniowałem też klika operatorów.
Do kodu łatwo wkradł się błąd. Potem wywaliłem zarówno
te dwie klasy jak i przedefiniowane operatory. Używam
po prostu f(&a,&b), albo rzadziej f(&a,&b,&c). Nie
czuję abym coś tracił z tego powodu, raczej zyskuję, bo
mam prostszą składnie do czytania.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
13. Data: 2012-05-16 08:05:30
Temat: Re: jezyki z definiowaniem operatorow
Od: " " <f...@g...pl>
M.M. <m...@g...pl> napisał(a):
> fir <f...@g...pl> napisał(a):
>
> > czy wystepuja jezyki z definiowaniem
> > operatorow (inne niz c++, gdzie zresztą
> > to definiowanie jest bardzo ograniczone -
> > mozna sobie wyobrazic jezyk ze tak swobodnym
> > definiowaniem operatorow jak funkcji, moze
> > to skrociloby listingi choc trudno powiedziec)
>
> Czy ja wiem, czy to może istotnie skrócić listingi?
> W moim odczuciu, poza nielicznymi wyjątkami, przeładowanie
> operatorów tylko utrudnia parsowanie kodu w oczach. Wyjątki o
> których mowa to np. zdefiniowanie operatora w standardowej/popularnej
> bibliotece co powoduje że oczy każdego programisty dobrze
> przywykły do ich używania.
>
trudno powiedziec, w sumie taki operator (jak z przykladow
wczesniej) to tylko troche inny sposob wywolania funkcji
(wiec nie taka wielka zmiana, mw to samo)
[kiedys myslelem czy nie oznaczac takich slownych operatorow
specjalnymi znakami np <dot> a nie dot ale teraz widze ze moga
byc zwykle slowa]
- jest to oszczedniejsze w znaki w stosunku do wywolan funkcji
ale tez o ilestam trudniejsze w czytaniu - z tym ze c w pewnym
sensie jest pomyslane dla zaawansowanych, ludzi ktorzy nawykli,
jesli skrotowosc zapisu laczy sie z pewna trudnoscia w
nauczeniu sie jak tego uzywac to c jednak idzie w ta strone
(tj promuje zaawansowanych) - o tyle mozna by powiedziec ze
to by w pewnym sensie korespondowalo
(acz dokladnie ciezko powiedziec jakie komplikacje i dobre
rzeczy by z tego wynikaly)
jako poprawka do c moglbym to rozumiec jako mozliwosc
definiowania funkcji w takiej operatorowej postaci (obok
zwyklych - dorzucam do swojej listy ew poprawek do c )
>
> Ostatnio w pewnym programie (C++) zdefiniowałem dwie "małe"
> klasy. Jedna klasa obudowywała unsigned int, druga
> unsigned long long. Przedefiniowałem też klika operatorów.
> Do kodu łatwo wkradł się błąd. Potem wywaliłem zarówno
> te dwie klasy jak i przedefiniowane operatory. Używam
> po prostu f(&a,&b), albo rzadziej f(&a,&b,&c). Nie
> czuję abym coś tracił z tego powodu, raczej zyskuję, bo
> mam prostszą składnie do czytania.
>
> Pozdrawiam
>
>
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
14. Data: 2012-05-16 10:10:40
Temat: Re: jezyki z definiowaniem operatorow
Od: Maciej Sobczak <s...@g...com>
On May 15, 7:10 pm, "fir " <f...@g...pl> wrote:
> czy wystepuja jezyki z definiowaniem
> operatorow
> czy sa takie jezyki i jak to wyglada?
Np. w Adzie, gdzie wygląda to podobnie, jak w C++.
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
-
15. Data: 2012-05-16 11:58:55
Temat: Re: jezyki z definiowaniem operatorow
Od: Edek Pienkowski <e...@g...com>
Dnia Wed, 16 May 2012 01:07:12 +0100, Andrzej Jarzabek napisal:
> On 16/05/2012 00:00, Edek Pienkowski wrote:
>> Dnia Tue, 15 May 2012 21:39:36 +0100, Andrzej Jarzabek napisal:
>>
>> Tak więc w językach znanych przez kolegę "pierwszeństwo i stronność... "
>> - no, mądre słowo - "są określane przez gramatykę". Ale kolega ma świadomość
>> istnienia języków funkcyjnych. Hmm.
>
> I?
>
>> A gdyby tak powiedzieć, że nie musi tego określać gramatyka i że to byt
>> określa świadomość?
>
> Jeśli kolega ma do npisania coś konkretnego, to może kolega napisać, nie
> wykluczam nawet, że z ciekawości przeczytam.
Jakiś konkret do którego można się odnieść by się przydał, nie wiem co
miałoby być konkretem.
>
> W przeciwnym razie, to co gdyby tak powiedzieć, że nie należy mnożyć
> bytów ponad potrzebę i ceterum censeo że jak kolega ma tak chrzanić, to
> mi się nie chce w ten sposób rozmawiać.
>
>> Kurde, zaczynam rozumieć dlaczego niektórzy uważają OO
>> za szkodnika, strasznie sformatowało umysły.
>
> Może kolega o niesformatowanym umyśle wytłumaczy, jaki jest związek OO z
> czymkolwiek, co napisałem?
>
Napisał kolega:
>>> Ze swobodnym definiowaniem operatorów problem jest taki, że ich
>>> pierwszeństwo i stronność są określone gramatyką języka. Zmienianie tego
>>> na bieżąco przy pomocy samego programu w tym języku wydaje się
>>> problematyczne - być może, że wręcz prowadzi do nierozwiązywalnych
>>> problemów, a na pewno standardowy model skaner-parser-translacja trafiłby
>>> szlag.
Z OO ma to dwa rodzaje związku. Pierwszy: tak jest w większości popularnych
języków obiektowych, ale nie wynika to z niczego, jest szczegółem
implementacyjnym. Parser gcc zamienia niektóre (x-x) na odpowiedniego typu
zero, ale to nie znaczy że musi to robić akurat parser, późniejsze stadia
mogą implementować taki folding. Podobnie jest z operatorami, można już po
parsowaniu przekształcić graf składni.
Drugi: +:Matrix,Matrix -> Matrix operuje na typach Matrix,
które są typem złożonym i zazwyczaj przeciążenie operatorów jest mocno
związane z OO bo wiąże operatory czyli kod z danymi. Wiem, że kolega nic
takiego nie napisał, ale taki jest kontekst. Może Tcl jest jakimś przykładem
innego podejścia, tyle że mocno amorficznym.
Edek
-
16. Data: 2012-05-16 12:24:53
Temat: Re: jezyki z definiowaniem operatorow
Od: " " <f...@g...pl>
firr <f...@g...pl> napisał(a):
> Daniel Janus <n...@g...com> napisał(a):
>
> > W dniu wtorek, 15 maja 2012 18:10:51 UTC+1 u=BFytkownik fir napisa=B3:
> > > czy wystepuja jezyki z definiowaniem=20
> > > operatorow (inne niz c++, gdzie zreszt=B1
> > > to definiowanie jest bardzo ograniczone -
> > > mozna sobie wyobrazic jezyk ze tak swobodnym=20
> > > definiowaniem operatorow jak funkcji, moze
> > > to skrociloby listingi choc trudno powiedziec)
> >
> > Co rozumiesz przez "definiowanie operator=F3w"?
> >
> > --D.
>
>
> przez definiowanie operatorow rozumiem glownie
> nadanie wywolaniom funkcji postaci operatorowej np
> zamiast
>
> print("this", "is", 4, "lisa") //funkcja print
>
> print "this" "is" 4 "lisa" //operator print
>
przy okazji tego to powstaje pomysl na nowy operator
jakiego nie ma w c - operator zapodawania sekwencyjnego
np mozna miec funkcje ktora przyjmie np 4 argumenty rownolegle
na raz ale mozna tez wyobrazis sobie funkcje ktora wywolana zostanie
4 trazy za kazdym razem z kolejnym argumentem
print "ala"+"ma"+"kota" // print("alamakota");
print "ala" "ma" "kota" // print("ala","ma","kota");
print ("ala")("ma")("kota") // print("ala");
print("ma");
print("kota");
(jakiestam operatory w srodku czy to slowami czy symbolami)
(w sumie wlasnie zamist dodawac stringi i tracic procek
lepiej nie zmieniac danych tylko wywolac po kolei kilka printow
na odzielnych stringach)
>
> float3 d = cross(cross(a,b),c) //funkcja cross
>
> float3 d = a cross b cross c //operator cross
>
> c = concatenate(a,b);
>
> c = a concatenate b
>
>
> itd
>
>
> raczej nie ma z tym zasadniczego problemu, zastanawiam
> sie nad ew konsekwencjami takiego czegos (bo wynikaja z tego
> pewne ciekawe wnioski)
>
>
>
>
>
>
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
17. Data: 2012-05-16 13:23:48
Temat: Re: jezyki z definiowaniem operatorow
Od: Piotr Chamera <p...@p...onet.pl>
W dniu 2012-05-16 12:24, f...@g...pl pisze:
> firr<f...@g...pl> napisał(a):
>
>> Daniel Janus<n...@g...com> napisał(a):
>>
>>> W dniu wtorek, 15 maja 2012 18:10:51 UTC+1 u=BFytkownik fir napisa=B3:
>>>> czy wystepuja jezyki z definiowaniem=20
>>>> operatorow (inne niz c++, gdzie zreszt=B1
>>>> to definiowanie jest bardzo ograniczone -
>>>> mozna sobie wyobrazic jezyk ze tak swobodnym=20
>>>> definiowaniem operatorow jak funkcji, moze
>>>> to skrociloby listingi choc trudno powiedziec)
>>>
>>> Co rozumiesz przez "definiowanie operator=F3w"?
>>>
>>> --D.
>>
>>
>> przez definiowanie operatorow rozumiem glownie
>> nadanie wywolaniom funkcji postaci operatorowej np
>> zamiast
>>
>> print("this", "is", 4, "lisa") //funkcja print
>>
>> print "this" "is" 4 "lisa" //operator print
>>
>
> przy okazji tego to powstaje pomysl na nowy operator
> jakiego nie ma w c - operator zapodawania sekwencyjnego
>
> np mozna miec funkcje ktora przyjmie np 4 argumenty rownolegle
> na raz ale mozna tez wyobrazis sobie funkcje ktora wywolana zostanie
> 4 trazy za kazdym razem z kolejnym argumentem
>
> print "ala"+"ma"+"kota" // print("alamakota");
>
> print "ala" "ma" "kota" // print("ala","ma","kota");
>
> print ("ala")("ma")("kota") // print("ala");
> print("ma");
> print("kota");
W niektórych językach nieco wyższego poziomu niż C (w nawiązaniu
do wątku o HLL-ach) takie konstrukcje albo są wbudowane (np. niektóre
funkcje w lispie),
CL-USER> (+ 1 23 45 1.23 3/4)
70.98
albo można je łatwo zdefiniować:
(defun printall (&rest all)
(dolist (x all) (princ x)))
CL-USER> (printall "ala" "ma" "kota")
alamakota
NIL
printall można też zdefiniować jak poniżej (coś podobnego do funkcji
map występuje w wielu językach):
(defun printall (&rest all)
(map nil #'princ all))
> (jakiestam operatory w srodku czy to slowami czy symbolami)
>
> (w sumie wlasnie zamist dodawac stringi i tracic procek
> lepiej nie zmieniac danych tylko wywolac po kolei kilka printow
> na odzielnych stringach)
-
18. Data: 2012-05-16 13:32:58
Temat: Re: definiowanie operatorow - lisp
Od: " " <f...@N...gazeta.pl>
> albo można je łatwo zdefiniować:
> (defun printall (&rest all)
> (dolist (x all) (princ x)))
> CL-USER> (printall "ala" "ma" "kota")
> alamakota
> NIL
no nawet w miare w tej linijce (printall "ala" "ma" "kota")
bo krotko, ale w c mogloby byc czesto mniej o nawias,
a co to jest "&rest" i "(x doall)" ?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
19. Data: 2012-05-16 13:59:04
Temat: Re: definiowanie operatorow - lisp
Od: Piotr Chamera <p...@p...onet.pl>
W dniu 2012-05-16 13:32, f...@N...gazeta.pl pisze:
>> albo można je łatwo zdefiniować:
>
>> (defun printall (&rest all)
>> (dolist (x all) (princ x)))
>
>> CL-USER> (printall "ala" "ma" "kota")
>> alamakota
>> NIL
>
> no nawet w miare w tej linijce (printall "ala" "ma" "kota")
> bo krotko, ale w c mogloby byc czesto mniej o nawias,
>
> a co to jest "&rest" i "(x doall)" ?
(&rest all) oznacza mniej więcej tyle, że wszystkie pozostałe argumenty
przekazane do funkcji zostaną zebrane w listę i będzie ona w ciele
funkcji dostępna pod podaną nazwą (w tym przypadku nazwałem ją ,,all")
A to (dolist (x all) (princ x)) po prostu iteruje po liście i na każdym
elemencie ,,x" na liście ,,all" wykonuje funkcję ,,princ".
-
20. Data: 2012-05-16 14:12:55
Temat: Re: definiowanie operatorow - lisp
Od: " " <f...@N...gazeta.pl>
Piotr Chamera <p...@p...onet.pl> napisał(a):
> W dniu 2012-05-16 13:32, f...@N...gazeta.pl pisze:
> >> albo moĹźna je Ĺatwo zdefiniowaÄ:
> >
> >> (defun printall (&rest all)
> >> (dolist (x all) (princ x)))
> >
> >> CL-USER> (printall "ala" "ma" "kota")
> >> alamakota
> >> NIL
> >
> > no nawet w miare w tej linijce (printall "ala" "ma" "kota")
> > bo krotko, ale w c mogloby byc czesto mniej o nawias,
> >
> > a co to jest "&rest" i "(x doall)" ?
>
> (&rest all) oznacza mniej wiÄcej tyle, Ĺźe wszystkie pozostaĹe argumenty
> przekazane do funkcji zostanÄ zebrane w listÄ i bÄdzie ona w ciele
> funkcji dostÄpna pod podanÄ nazwÄ (w tym przypadku nazwaĹem jÄ âallâ)
> A to (dolist (x all) (princ x)) po prostu iteruje po liĹcie i na kaĹźdym
> elemencie âxâ na liĹcie âallâ wykonuje funkcjÄ âprincâ.
a czemu & przed rest, pewnie i rest i dolist i defun sa sowami
kluczowymi wiec po co & przed rest?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/