Thread View: pl.comp.lang.funkcyjne
29 messages
29 total messages
Started by DecatonE
Mon, 06 Oct 2003 10:24
czemu tu taka cisza?
Author: DecatonE
Date: Mon, 06 Oct 2003 10:24
Date: Mon, 06 Oct 2003 10:24
7 lines
1094 bytes
1094 bytes
Trochę się dziwię, że grupa znalazła się w głównej hierarchi... No nic czekam na rozmówców. adam -- [ rectifier[X]mesa.eu.org : mail ] [ http://www.mesa.eu.org : home ]
Re: czemu tu taka cisza?
Author: Piotr Dembiński
Date: Mon, 06 Oct 2003 11:16
Date: Mon, 06 Oct 2003 11:16
6 lines
1112 bytes
1112 bytes
DecatonE <news01@skasuj.mesa.eu.org> writes: > Trochę się dziwię, że grupa znalazła się w głównej hierarchi... > No nic czekam na rozmówców. o czym chcesz porozmawiać? :>
Re: czemu tu taka cisza?
Author: DecatonE
Date: Mon, 06 Oct 2003 11:26
Date: Mon, 06 Oct 2003 11:26
31 lines
1893 bytes
1893 bytes
Piotr Dembiński... >> No nic czekam na rozmówców. > > o czym chcesz porozmawiać? :> Np. o: - Mozart-Oz (poprzedni wątek) - zaletach/wadach języków (haskell, erlang, scheme, ml etc.) - zastosowaniach prakycznych w/w itd. ;) Praktyczne doświadczenie (proste ćwiczenia na uczelni) mam jedynie z Lispem, ale dość intensywnie uczę się teraz OZa. Chciałbym też nauczyć się podstaw składni języków przez was używanych, najlepiej 'różnicowo', tj. jak wyrazić (i czy się da), to co jeden napisze w haskellu w schemie itp. Powiedzmy, że ja będę reprezentował OZa :) Kolejne pytania: jakie ograniczenia w praktycznych projektach (np. komercyjnych) - prawne, pod względem możliwości zrobienia czegoś itd.... Najchętniej też namówiłbym kogoś na poznanie OZ'a. adam -- [ rectifier[X]mesa.eu.org : mail ] [ http://www.mesa.eu.org : home ]
Re: czemu tu taka cisza?
Author: Andrzej Wasowski
Date: Mon, 06 Oct 2003 17:56
Date: Mon, 06 Oct 2003 17:56
29 lines
1998 bytes
1998 bytes
> Praktyczne doświadczenie (proste ćwiczenia na uczelni) > mam jedynie z Lispem, No tak, to jest paskuda. Ja tego uzywam tylko jak mnie emacs zmusi :) Wiesc niesie, ze jezeli juz lubisz programowac w skladni abstrakcyjnej to lepiej zabrac sie za scheme. > Kolejne pytania: jakie ograniczenia w praktycznych projektach > (np. komercyjnych) - prawne, pod względem możliwości zrobienia > czegoś itd.... No chyba duze. Zdaje sie, ze wiekszosc implementacji jest open source, bez ograniczen do stosowania w projektach komercyjnych. Oczywiscie nie jestem tu specem. Wiem ze Moscow ML daje sie uzywac na takich zasadach jak gcc. Ale do wielu zastosowan moze sie nie nadac, ze wzgledu na stosunkowo nisk wydajnosc. Z drugiej strony ja go uzywam do dosc zaawansowanego kompilatora i dziala zadowalajaco (choc po prawdzie, kluczowa biblioteka do BDDs jest importowana z C). Wymien konkrety program, ktory Cie zastanawia, to moze jakis uzytkownik, ktory zna jego licencje sie odezwie. andrzej -- wasowski.org
Re: czemu tu taka cisza?
Author: DecatonE
Date: Mon, 06 Oct 2003 19:07
Date: Mon, 06 Oct 2003 19:07
48 lines
3070 bytes
3070 bytes
Andrzej Wasowski... >> Praktyczne doświadczenie (proste ćwiczenia na uczelni) >> mam jedynie z Lispem, > > No tak, to jest paskuda. Ja tego uzywam tylko jak mnie emacs zmusi > :) Owszem, paskuda :) I zniechęciła skutecznie moich kolegów. Z dwóch banalnych powodów: - nawiasy (sic!) - "gdzie się podziała pętla for?"... :) > Wiesc niesie, ze jezeli juz lubisz programowac w skladni > abstrakcyjnej to lepiej zabrac sie za scheme. Mam zamiar się nauczyć wszystkich. Do szerszych zastosowań skupię się chyba na tandemie Alice/Mozart-OZ. Zaznaczam, że skończyłem studia i robię to dla przyjemności ;) Być może kiedyś wrócę rozpocząć studia doktoranckie (na razie praca i studia filozoficzne zajmują dużo czasu). >> Kolejne pytania: jakie ograniczenia w praktycznych projektach >> (np. komercyjnych) - prawne, pod względem możliwości zrobienia >> czegoś itd.... > > No chyba duze. Zdaje sie, ze wiekszosc implementacji jest open > source, bez ograniczen do stosowania w projektach komercyjnych. > Oczywiscie nie jestem tu specem. > > Wiem ze Moscow ML daje sie uzywac na takich zasadach jak gcc. > Ale do wielu zastosowan moze sie nie nadac, ze wzgledu na > stosunkowo nisk wydajnosc. Z drugiej strony ja go uzywam > do dosc zaawansowanego kompilatora i dziala zadowalajaco (choc > po prawdzie, kluczowa biblioteka do BDDs jest importowana z C). > > Wymien konkrety program, ktory Cie zastanawia, to moze jakis > uzytkownik, ktory zna jego licencje sie odezwie. Raczej Alice/Mozart-OZ - interesuje mnie także przetwarzanie rozproszone, programowanie współbieżne, systemy agentowe - wydają się być stworzone do takich zastosowań (zresztą są ;)....). O szczegółach licencji dowiem się już sam i dam znać. adam -- [ rectifier[X]mesa.eu.org : mail ] [ http://www.mesa.eu.org : home ]
Re: czemu tu taka cisza?
Author: Andrzej Wasowski
Date: Tue, 07 Oct 2003 15:25
Date: Tue, 07 Oct 2003 15:25
7 lines
1101 bytes
1101 bytes
DecatonE... > - "gdzie się podziała pętla for?"... :) a po co to komu? -- wasowski.org
Re: czemu tu taka cisza?
Author: DecatonE
Date: Tue, 07 Oct 2003 15:31
Date: Tue, 07 Oct 2003 15:31
9 lines
1303 bytes
1303 bytes
Andrzej Wasowski... >> - "gdzie się podziała pętla for?"... :) > > a po co to komu? No po nic. Ale nie każdemu było to łatwo zrozumieć. adam
Re: czemu tu taka cisza?
Author: Piotr Dembiński
Date: Tue, 07 Oct 2003 18:24
Date: Tue, 07 Oct 2003 18:24
8 lines
1303 bytes
1303 bytes
Andrzej Wasowski <wasowski@see.my.sig> writes: > DecatonE... > > - "gdzie się podziała pętla for?"... :) > > a po co to komu? do odróżniania teoretyków od praktyków programowania :>
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 08:59
Date: Fri, 10 Oct 2003 08:59
25 lines
1798 bytes
1798 bytes
Piotr Dembiński wrote: > Andrzej Wasowski <wasowski@see.my.sig> writes: > > >>DecatonE... >> >>>- "gdzie się podziała pętla for?"... :) >> >>a po co to komu? > > > do odróżniania teoretyków od praktyków programowania :> W haskellu chyba nie ma 'for', nie znam go dobrze, cos tam podlubalem, ale 'for' nie byl nigdy potrzebny. Po drugie sa dwa rodzaje 'for': paskudny: for (i=0; i<10; ++i) / for i = 0 to 9 ciekawszy: for x in [3,4,5,6,7] Wiec jesli juz jakis 'for' jest uzyteczny to tylko pythoniasty. -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: Andrzej Wasowski
Date: Fri, 10 Oct 2003 10:00
Date: Fri, 10 Oct 2003 10:00
11 lines
1395 bytes
1395 bytes
Przemek Wisniewski: > paskudny: for (i=0; i<10; ++i) / for i = 0 to 9 > ciekawszy: for x in [3,4,5,6,7] > > Wiec jesli juz jakis 'for' jest uzyteczny to tylko pythoniasty. A ja myslalem ze ten drugi nazywa sie app ... I napewno jest tez w Haskellu :) -- wasowski.org
Re: czemu tu taka cisza?
Author: DecatonE
Date: Fri, 10 Oct 2003 10:01
Date: Fri, 10 Oct 2003 10:01
26 lines
1811 bytes
1811 bytes
Przemek Wiśniewski...
> paskudny: for (i=0; i<10; ++i) / for i = 0 to 9
> ciekawszy: for x in [3,4,5,6,7]
A listę może zwrócić dowolna funkcja, więc wariant ciekawszy jest
jednocześnie bardziej elastyczny.
W Oz:
{ForAll [3 4 5 6] P}
ForAll jest chyba wbudowany, ale implementacja i tak byłaby prosta:
proc {ForAll Xs P}
case Xs
of nil then skip
[] X|Xr then
{P X}
{ForAll Xr P}
end
end
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
www.mozart-oz.org | Mozart Programming System
Re: czemu tu taka cisza?
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 10:03
Date: Fri, 10 Oct 2003 10:03
64 lines
2594 bytes
2594 bytes
Przemek Wiśniewski napisał:
>>>>- "gdzie się podziała pętla for?"... :)
>>>
>>>a po co to komu?
>>
>> do odróżniania teoretyków od praktyków programowania :>
>
> W haskellu chyba nie ma 'for', nie znam go dobrze, cos tam podlubalem,
> ale 'for' nie byl nigdy potrzebny.
Nie ma w jezyku, ale mozna uzyc odpowiedniego HOFa (higher-order
function) lub stworzyc samemu.
For'a z efektami (czyli np. imperatywnego) iterujacego po liscie mozna
napisac, np. tak
for :: Monad m => [a] -> (a -> m b) -> m ()
for (x:xs) f = f x >> for xs f
for [] _ = return ()
Lub krocej
for :: Monad m => [a] -> (a -> m b) -> m ()
for = flip mapM_
(bo to jest wlasciwie to samo z mapM_, tylko z inna kolejnoscia
parametrow)
Uzycie:
for [1..10] print
w monadzie IO spowoduje wypisanie liczb 1 .. 10 w kolejnych linijkach,
za to
for [1..] print
bedzie wypisywac liczby od 1 "do nieskonczonosci".
W bardziej skomplikowanych przypadkach mozna uzyc takiej skladni:
for [1..] $ \x -> do
print x
print (x * 2)
Wyglada prawie jak Python ;)
> Po drugie sa dwa rodzaje 'for':
>
> paskudny: for (i=0; i<10; ++i) / for i = 0 to 9
Paskudnego tez mozna sobie w Haskellu zapisac.
> ciekawszy: for x in [3,4,5,6,7]
>
> Wiec jesli juz jakis 'for' jest uzyteczny to tylko pythoniasty.
Hmmm, dlaczego tylko?
Pozdrawiam,
Tomek
--
.signature: Too many levels of symbolic links
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 10:34
Date: Fri, 10 Oct 2003 10:34
73 lines
3224 bytes
3224 bytes
Tomasz Zielonka wrote: > Przemek Wiśniewski napisał: > >>>>>- "gdzie się podziała pętla for?"... :) >>>> >>>>a po co to komu? >>> >>>do odróżniania teoretyków od praktyków programowania :> >> >>W haskellu chyba nie ma 'for', nie znam go dobrze, cos tam podlubalem, >>ale 'for' nie byl nigdy potrzebny. > > > Nie ma w jezyku, ale mozna uzyc odpowiedniego HOFa (higher-order > function) lub stworzyc samemu. > > For'a z efektami (czyli np. imperatywnego) iterujacego po liscie mozna > napisac, np. tak > > for :: Monad m => [a] -> (a -> m b) -> m () > for (x:xs) f = f x >> for xs f > for [] _ = return () > > Lub krocej > > for :: Monad m => [a] -> (a -> m b) -> m () > for = flip mapM_ > > (bo to jest wlasciwie to samo z mapM_, tylko z inna kolejnoscia > parametrow) > > Uzycie: > > for [1..10] print > > w monadzie IO spowoduje wypisanie liczb 1 .. 10 w kolejnych linijkach, > za to > > for [1..] print > > bedzie wypisywac liczby od 1 "do nieskonczonosci". > > W bardziej skomplikowanych przypadkach mozna uzyc takiej skladni: > > for [1..] $ \x -> do > print x > print (x * 2) > > Wyglada prawie jak Python ;) Prawda, w tez ocamlu sa calkiem dobre funkcje: List.iter i Array.iter >>Po drugie sa dwa rodzaje 'for': >> >>paskudny: for (i=0; i<10; ++i) / for i = 0 to 9 > > > Paskudnego tez mozna sobie w Haskellu zapisac. Powtarzam - nie bylem nigdy w takiej potrzebie wiec wydaje mi sie to zly pomysl, mam tu na mysli, haskell, ocamla i pythona. >>ciekawszy: for x in [3,4,5,6,7] >> >>Wiec jesli juz jakis 'for' jest uzyteczny to tylko pythoniasty. > > Hmmm, dlaczego tylko? Tak mi sie wydaje, dla przykladu: kiedy mysle o petli w C nie mam na mysli indeksow tablic tylko elementy tablic. Mimo to uzywam indeksow. -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 10:39
Date: Fri, 10 Oct 2003 10:39
35 lines
1990 bytes
1990 bytes
DecatonE wrote:
> Przemek Wiśniewski...
>
>
>>paskudny: for (i=0; i<10; ++i) / for i = 0 to 9
>>ciekawszy: for x in [3,4,5,6,7]
>
>
> A listę może zwrócić dowolna funkcja, więc wariant ciekawszy jest
> jednocześnie bardziej elastyczny.
>
> W Oz:
> {ForAll [3 4 5 6] P}
>
> ForAll jest chyba wbudowany, ale implementacja i tak byłaby prosta:
> proc {ForAll Xs P}
> case Xs
> of nil then skip
> [] X|Xr then
> {P X}
> {ForAll Xr P}
> end
> end
>
> adam
Za duzo pisania, w haskellu to bedzie wygladalo jakos podobnie:
iter [] f = return ()
iter (e:es) f = do
f e
iter es f
--
Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: DecatonE
Date: Fri, 10 Oct 2003 11:13
Date: Fri, 10 Oct 2003 11:13
23 lines
1768 bytes
1768 bytes
Przemek Wiśniewski...
> Za duzo pisania, w haskellu to bedzie wygladalo jakos podobnie:
>
> iter [] f = return ()
> iter (e:es) f = do
> f e
> iter es f
W Alice (opartej na Standart ML)
jeszcze prościej:
fun iter (nil, f) = nil
| iter (e::es, f) = f t :: iter (es, f)
Kod chyba jasny.
:)))
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
www.mozart-oz.org | Mozart Programming System
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 11:19
Date: Fri, 10 Oct 2003 11:19
28 lines
1993 bytes
1993 bytes
DecatonE wrote: > Przemek Wiśniewski... > > >>Za duzo pisania, w haskellu to bedzie wygladalo jakos podobnie: >> >>iter [] f = return () >>iter (e:es) f = do >> f e >> iter es f > > > W Alice (opartej na Standart ML) > jeszcze prościej: > > fun iter (nil, f) = nil > | iter (e::es, f) = f t :: iter (es, f) Czy to przypadkiem nie jest funkcja map, albo jakis jej wariant? Wydaje mi sie, ze ta funkcja zwraca przetworzona lista, a nie powinna. map [] f = [] map (e:es) f = (f e) : (map es f) No i w haskellu znow jest krocej :) -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 11:23
Date: Fri, 10 Oct 2003 11:23
18 lines
1859 bytes
1859 bytes
Przemek Wiśniewski wrote: >>> Po drugie sa dwa rodzaje 'for': >>> >>> paskudny: for (i=0; i<10; ++i) / for i = 0 to 9 >> >> >> >> Paskudnego tez mozna sobie w Haskellu zapisac. > > > Powtarzam - nie bylem nigdy w takiej potrzebie wiec wydaje mi sie to zly > pomysl, mam tu na mysli, haskell, ocamla i pythona. Ale mieszam, sprostowania: w ocamlu uzywalem 'for' - oczywiscie, w pythonie tez, ale python ma ladny 'for', w haskellu nie. -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: DecatonE
Date: Fri, 10 Oct 2003 12:09
Date: Fri, 10 Oct 2003 12:09
32 lines
2412 bytes
2412 bytes
Przemek Wiśniewski...
> > fun iter (nil, f) = nil
> > | iter (e::es, f) = f t :: iter (es, f)
>
> Czy to przypadkiem nie jest funkcja map, albo jakis jej wariant?
> Wydaje mi sie, ze ta funkcja zwraca przetworzona lista, a nie
> powinna.
Można zignorować :) Zresztą tamto można przerobić zamieniając "::" na
średnik chyba... wtedy zwróci nil.
Acha: oczywiście zamiast 't' ma być 'e' i przecinków brak ma być ;)
fun iter nil f = nil
| iter (e::es) f = f e; iter es f
Sprawdzę w domu, tu (w pracy) nie mam kompilatora.
> map [] f = []
> map (e:es) f = (f e) : (map es f)
Krócej się nie da :) nie mam wątpliwości.
W ML'u łączenie heada i taila to podwójny dwukropek,
a nil jest dłuższe od []. W tym przypadku Haskell wygra
czterema znakami różnicy ;) Ale ML zaprzepaszcza ostatnie
szanse słowem kluczowym 'fun' i operatorem '|' ;))))
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
www.mozart-oz.org | Mozart Programming System
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 12:23
Date: Fri, 10 Oct 2003 12:23
51 lines
2877 bytes
2877 bytes
DecatonE wrote: > Przemek Wiśniewski... > > >>>fun iter (nil, f) = nil >>> | iter (e::es, f) = f t :: iter (es, f) >> >>Czy to przypadkiem nie jest funkcja map, albo jakis jej wariant? >>Wydaje mi sie, ze ta funkcja zwraca przetworzona lista, a nie >>powinna. > > > Można zignorować :) Zresztą tamto można przerobić zamieniając "::" na > średnik chyba... wtedy zwróci nil. no nie zabardzo przerobic, co z typem funkcji f? Nie wiem jak jest w tej Alice, ale ocaml nie przlknie bez slowa czegos takiego: (f e; foo bar) gdzie f : int -> int a foo : string -> unit f musialoby byc : int -> unit, wartosc zwracana z funkcji trzeba zawsze odbierac > Acha: oczywiście zamiast 't' ma być 'e' i przecinków brak ma być ;) > > fun iter nil f = nil > | iter (e::es) f = f e; iter es f > > Sprawdzę w domu, tu (w pracy) nie mam kompilatora. > > >>map [] f = [] >>map (e:es) f = (f e) : (map es f) > > > Krócej się nie da :) nie mam wątpliwości. Nawiasy tez pewnei mozna pominac, ale nie pamietam. > W ML'u łączenie heada i taila to podwójny dwukropek, > a nil jest dłuższe od []. W tym przypadku Haskell wygra > czterema znakami różnicy ;) Ale ML zaprzepaszcza ostatnie > szanse słowem kluczowym 'fun' i operatorem '|' ;)))) Moze urzadzimy konkurs na najkrotszy program? Cos jak te perlowe konkursy. -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: DecatonE
Date: Fri, 10 Oct 2003 13:00
Date: Fri, 10 Oct 2003 13:00
40 lines
2479 bytes
2479 bytes
Przemek Wiśniewski...
A co w ogóle ta funkcja zwróci?
iter [] f = return ()
iter (e:es) f = do
f e
iter es f
Co oznaczają dwa ostatnie wiersze? Wywołanie funkcji
f na argumencie e, potem iter na argumentach es i f
i zwrócenie wartości iter es f? Więc ostatecznie zwrócone
jest () - co to oznacza?
Co oznacza 'do'?
Tak, czy siak w wolnym czasie sprawdzę jak to zrobić w SMLu.
(Na pewno można potraktować wynik taką funkcją fn x => nil ;) )
>>>map [] f = []
>>>map (e:es) f = (f e) : (map es f)
>>
>>
>> Krócej się nie da :) nie mam wątpliwości.
>
> Nawiasy tez pewnei mozna pominac, ale nie pamietam.
Bardzo możliwe :)
> Moze urzadzimy konkurs na najkrotszy program? Cos jak te perlowe
> konkursy.
Trzeba by jeszcze jakiś pomysł na temat wymyśleć.
A Perl brzydki jest ;) Pamiętam za to takie konkursy w C.
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
www.mozart-oz.org | Mozart Programming System
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 13:16
Date: Fri, 10 Oct 2003 13:16
33 lines
2285 bytes
2285 bytes
DecatonE wrote: > Przemek Wiśniewski... > > A co w ogóle ta funkcja zwróci? Funkcja zwroci IO () > iter [] f = return () > iter (e:es) f = do > f e > iter es f > > Co oznaczają dwa ostatnie wiersze? Wywołanie funkcji > f na argumencie e, potem iter na argumentach es i f > i zwrócenie wartości iter es f? tak > Więc ostatecznie zwrócone > jest () - co to oznacza? return jest funkcja, bierze wartosc i zwraca ja w monadzie. Monady to zawily temat, ja go jeszcze nieprzelknalem. > Co oznacza 'do'? do znaczy ze 'siedzimy' w monadzie, ale nie mnie pytaj o szczegoly > Tak, czy siak w wolnym czasie sprawdzę jak to zrobić w SMLu. > (Na pewno można potraktować wynik taką funkcją fn x => nil ;) -- Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: Tomasz Baranski
Date: Fri, 10 Oct 2003 14:02
Date: Fri, 10 Oct 2003 14:02
53 lines
2365 bytes
2365 bytes
In article <3045-1065776488@gw.magellan.net.pl>, Przemek Wisniewski wrote:
>> Andrzej Wasowski <wasowski@see.my.sig> writes:
>>
>>>>- "gdzie sie podziala petla for?"... :)
>>>
>>>a po co to komu?
>>
>> do odrozniania teoretykow od praktykow programowania :>
>
> W haskellu chyba nie ma 'for', nie znam go dobrze, cos tam podlubalem,
> ale 'for' nie byl nigdy potrzebny.
>
> Po drugie sa dwa rodzaje 'for':
>
> paskudny: for (i=0; i<10; ++i) / for i = 0 to 9
> ciekawszy: for x in [3,4,5,6,7]
>
> Wiec jesli juz jakis 'for' jest uzyteczny to tylko pythoniasty.
Hmm...
Common Lisp:
(dotimes (i 10) ...)
(dolist (x '(3 4 5 6 7)) ... )
; nasty little ones:
(do ((i 0 (+ i 1)))
((>= i 10))
...)
(do ((x '(3 4 5 6 7) (cdr x)))
((null x))
...)
I oczywiscie jest jeszcze makro loop, ktorej tajnikow nie zglebilem. Proste
for (zwracajacego nieparzyste wartosci) mozna zrobic tak:
(loop for n from 1 to 10
when (oddp n)
collect n)
ISLisp:
(for (i 0 (+ i 1)) (< i 10) ...)
(for (x '(3 4 5 6 7) (cdr x)) ((null x)) ...)
Za wersje ISlispa nie recze, nie mam pod reka zadnej implementacji, zeby
sprawdzic.
--
Tomasz Baranski yubi_newsy (at) go2 (dot) pl
The best way to predict the future is to invent it.
Alan Kay, Palo Alto Research Center
Re: czemu tu taka cisza?
Author: Andrzej Wasowski
Date: Fri, 10 Oct 2003 14:49
Date: Fri, 10 Oct 2003 14:49
59 lines
2917 bytes
2917 bytes
Oj Panowie, Panowie, czarujecie co nie miara. Sporo sie pomieszalo.
Nie znam pythona, ale zwykle rozumienie instrukcji for jest takie, ze
nie jest ona wyrazeniem, a zatem nie zwraca wartosci. W jezykach
funkcjonalnych zwykle oznacza sie to typem unit.
> proc {ForAll Xs P}
> case Xs
> of nil then skip
> [] X|Xr then
> {P X}
> {ForAll Xr P}
> end
> end
> Czy to przypadkiem nie jest funkcja map, albo jakis jej wariant?
> Wydaje mi sie, ze ta funkcja zwraca przetworzona lista, a nie powinna.
>
> map [] f = []
> map (e:es) f = (f e) : (map es f)
Ta funkcja zwraca przetworzone liste. Jej typ to
'a list -> ('a -> 'b) -> 'b list
For blizszy jest SMLowemu List.app o typie
('a -> 'b) -> 'a list -> unit
Implementowanemu np tak
fun app f [] = ()
| app f (x::xs) = (f x; app f xs)
Ta funkcja nie zwraca wyniku a tylko wykonuje f dl kazdego elementu.
[WARNING: slabo znam Haskella] Rzeczywiscie w Haskellu taka funkcja nie
miala by duzego sensu. Haskell nie zezwala na efekty uboczne a
aplikowanie funkcji bez efektow ubocznych jest tansze, gdy go w ogole
nie wykonywac :). Stad tez wyskakuje ta monady:
>iter [] f = return ()
>>iter (e:es) f = do
>> f e
>> iter es f
A jesli chodzi o dyskusje, co jest krotsze, to zwykle Haskell. Ale czy
to ma takie znaczenie?
Haskellisci zawsze o to sie kloca, czasami wpadajac w pulapke pisania
zupelnie niezrozumialych programow. Akura monadyczne app w Haskellu jest
dluzsze i duzo mniej zrozumiale od SMLowego, ze wzgledu na brak cech
imperatywnych...
andrzej
--
wasowski.org
Re: czemu tu taka cisza?
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 16:28
Date: Fri, 10 Oct 2003 16:28
29 lines
2553 bytes
2553 bytes
Przemek Wiśniewski napisał:
> return jest funkcja, bierze wartosc i zwraca ja w monadzie. Monady to
> zawily temat, ja go jeszcze nieprzelknalem.
Monady to bardzo użyteczna abstrakcja modelująca obliczenia. Chyba każdy
ma problemy z przyswojeniem tego tematu. Jest to mechanizm bardzo
ogólny, prosty, dzięki czemu znajduje zastosowanie w wielu
zastosowaniach. Łatwo jest jednak wpaść w pułapkę uznania jednego z tych
zastosowań za pełny obraz (przykład: IO).
Taki temat rzeka. Nigdy nie ma się pewności, czy się czegoś nie
przeoczyło. Podobnie zresztą jak w przypadku wielu innych ogólnych
abstrakcji semantycznych, np. obiektowości, wyrażeń, funkcji, itp.
Zainteresowanym proponuję skorzystać z biblioteczki:
http://www.haskell.org/bookshelf/#monads
Wydaje mi się, że pierwsza pozycja jest dosyć przystępna, a przy tym
bardzo obszerna. Sam nie czytałem całości, monad uczyłem się w bardziej
bolesny sposób.
PS. Ważne jest by pamiętać, że nie ma w tym żadnej magii :)
Wszystko da się logicznie wytłumaczyć.
Pozdrawiam,
Tomek
--
.signature: Too many levels of symbolic links
Re: czemu tu taka cisza?
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 16:29
Date: Fri, 10 Oct 2003 16:29
10 lines
1617 bytes
1617 bytes
Tomasz Zielonka napisał: > dzięki czemu znajduje zastosowanie w wielu zastosowaniach. masło maślane :) pozdr tomek -- .signature: Too many levels of symbolic links
Re: czemu tu taka cisza?
Author: Przemek Wis'niewski
Date: Mon, 13 Oct 2003 07:32
Date: Mon, 13 Oct 2003 07:32
63 lines
3078 bytes
3078 bytes
Andrzej Wasowski wrote:
> Oj Panowie, Panowie, czarujecie co nie miara. Sporo sie pomieszalo.
>
> Nie znam pythona, ale zwykle rozumienie instrukcji for jest takie, ze
> nie jest ona wyrazeniem, a zatem nie zwraca wartosci. W jezykach
> funkcjonalnych zwykle oznacza sie to typem unit.
To prawda, bo poprostu nie moze byc wyrazeniem.
>>proc {ForAll Xs P}
>> case Xs
>> of nil then skip
>> [] X|Xr then
>> {P X}
>> {ForAll Xr P}
>> end
>>end
>
>
>>Czy to przypadkiem nie jest funkcja map, albo jakis jej wariant?
>>Wydaje mi sie, ze ta funkcja zwraca przetworzona lista, a nie powinna.
>>
>>map [] f = []
>>map (e:es) f = (f e) : (map es f)
>
>
> Ta funkcja zwraca przetworzone liste. Jej typ to
>
> 'a list -> ('a -> 'b) -> 'b list
>
> For blizszy jest SMLowemu List.app o typie
>
> ('a -> 'b) -> 'a list -> unit
>
> Implementowanemu np tak
>
> fun app f [] = ()
> | app f (x::xs) = (f x; app f xs)
>
> Ta funkcja nie zwraca wyniku a tylko wykonuje f dl kazdego elementu.
Tak jak List.iter i Array.iter w Ocamlu.
> [WARNING: slabo znam Haskella] Rzeczywiscie w Haskellu taka funkcja nie
> miala by duzego sensu. Haskell nie zezwala na efekty uboczne a
> aplikowanie funkcji bez efektow ubocznych jest tansze, gdy go w ogole
> nie wykonywac :). Stad tez wyskakuje ta monady:
>
>
>>iter [] f = return ()
>>
>>>iter (e:es) f = do
>>> f e
>>> iter es f
>
>
> A jesli chodzi o dyskusje, co jest krotsze, to zwykle Haskell. Ale czy
> to ma takie znaczenie?
Nie, to byly zarty zaczepno-obronne.
--
Przemek Wis'niewski
Re: czemu tu taka cisza?
Author: Tomasz Baranski
Date: Mon, 13 Oct 2003 08:26
Date: Mon, 13 Oct 2003 08:26
24 lines
2222 bytes
2222 bytes
In article <24205-1066030454@gw.magellan.net.pl>, =?windows-1252?Q?Przemek_Wis=27niewski?= wrote:
> Andrzej Wasowski wrote:
>> Oj Panowie, Panowie, czarujecie co nie miara. Sporo sie pomieszalo.
>>
>> Nie znam pythona, ale zwykle rozumienie instrukcji for jest takie, ze
>> nie jest ona wyrazeniem, a zatem nie zwraca wartosci. W jezykach
>> funkcjonalnych zwykle oznacza sie to typem unit.
>
> To prawda, bo poprostu nie moze byc wyrazeniem.
Jak to?
Przeciez zarowno w OCamlu ("The Objective Caml system, release 4.07",
p.6.7.2) jak i w calej rodzinie LISPow 'if' jest wlasnie wyrazeniem.
Nie znam plynnie Haskela, ale Raport mowi to samo ("Haskell 98 Report", p.36).
Czy czegos nie rozumiem?
Tomo
--
Tomasz Bara±ski yubi_newsy (at) go2 (dot) pl
The best way to predict the future is to invent it.
Alan Kay, Palo Alto Research Center
Re: czemu tu taka cisza?
Author: Przemek Wiśniewski
Date: Mon, 13 Oct 2003 09:30
Date: Mon, 13 Oct 2003 09:30
30 lines
2500 bytes
2500 bytes
Tomasz Baranski wrote:
> In article <24205-1066030454@gw.magellan.net.pl>, =?windows-1252?Q?Przemek_Wis=27niewski?= wrote:
>
>>Andrzej Wasowski wrote:
>>
>>>Oj Panowie, Panowie, czarujecie co nie miara. Sporo sie pomieszalo.
>>>
>>>Nie znam pythona, ale zwykle rozumienie instrukcji for jest takie, ze
>>>nie jest ona wyrazeniem, a zatem nie zwraca wartosci. W jezykach
>>>funkcjonalnych zwykle oznacza sie to typem unit.
>>
>>To prawda, bo poprostu nie moze byc wyrazeniem.
>
>
> Jak to?
>
> Przeciez zarowno w OCamlu ("The Objective Caml system, release 4.07",
> p.6.7.2) jak i w calej rodzinie LISPow 'if' jest wlasnie wyrazeniem.
>
> Nie znam plynnie Haskela, ale Raport mowi to samo ("Haskell 98 Report", p.36).
>
> Czy czegos nie rozumiem?
>
> Tomo
Tak, nie zrozumiales bardzo prostej rzeczy - mowimy o petli for, a nie
warunku if.
--
Przemek Wiśniewski
Re: czemu tu taka cisza?
Author: Tomasz Baranski
Date: Mon, 13 Oct 2003 09:56
Date: Mon, 13 Oct 2003 09:56
16 lines
1802 bytes
1802 bytes
In article <32254-1066037554@gw.magellan.net.pl>, Przemek Wi¶niewski wrote:
>> Czy czegos nie rozumiem?
>
> Tak, nie zrozumiales bardzo prostej rzeczy - mowimy o petli for, a nie
> warunku if.
Oj.
Ale wstyd.
Tomo
P.S. Nigdy nie odpisywac w poniedzialek przed poranna kawa. :-)
--
Tomasz Bara±ski yubi_newsy (at) go2 (dot) pl
The best way to predict the future is to invent it.
Alan Kay, Palo Alto Research Center
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads