🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
29 messages
29 total messages Started by DecatonE Mon, 06 Oct 2003 10:24
czemu tu taka cisza?
#437
Author: DecatonE
Date: Mon, 06 Oct 2003 10:24
7 lines
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?
#438
Author: Piotr Dembiński
Date: Mon, 06 Oct 2003 11:16
6 lines
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?
#439
Author: DecatonE
Date: Mon, 06 Oct 2003 11:26
31 lines
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?
#440
Author: Andrzej Wasowski
Date: Mon, 06 Oct 2003 17:56
29 lines
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?
#441
Author: DecatonE
Date: Mon, 06 Oct 2003 19:07
48 lines
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?
#442
Author: Andrzej Wasowski
Date: Tue, 07 Oct 2003 15:25
7 lines
1101 bytes
DecatonE...
> - "gdzie się podziała pętla for?"... :)

a po co to komu? 

-- 
wasowski.org
Re: czemu tu taka cisza?
#443
Author: DecatonE
Date: Tue, 07 Oct 2003 15:31
9 lines
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?
#447
Author: Piotr Dembiński
Date: Tue, 07 Oct 2003 18:24
8 lines
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?
#448
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 08:59
25 lines
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?
#449
Author: Andrzej Wasowski
Date: Fri, 10 Oct 2003 10:00
11 lines
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?
#450
Author: DecatonE
Date: Fri, 10 Oct 2003 10:01
26 lines
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?
#465
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 10:03
64 lines
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?
#466
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 10:34
73 lines
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?
#451
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 10:39
35 lines
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?
#452
Author: DecatonE
Date: Fri, 10 Oct 2003 11:13
23 lines
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?
#453
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 11:19
28 lines
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?
#467
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 11:23
18 lines
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?
#454
Author: DecatonE
Date: Fri, 10 Oct 2003 12:09
32 lines
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?
#455
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 12:23
51 lines
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?
#456
Author: DecatonE
Date: Fri, 10 Oct 2003 13:00
40 lines
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?
#457
Author: Przemek Wiśniewski
Date: Fri, 10 Oct 2003 13:16
33 lines
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?
#468
Author: Tomasz Baranski
Date: Fri, 10 Oct 2003 14:02
53 lines
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?
#460
Author: Andrzej Wasowski
Date: Fri, 10 Oct 2003 14:49
59 lines
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?
#458
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 16:28
29 lines
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?
#459
Author: Tomasz Zielonka
Date: Fri, 10 Oct 2003 16:29
10 lines
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?
#461
Author: Przemek Wis'niewski
Date: Mon, 13 Oct 2003 07:32
63 lines
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?
#462
Author: Tomasz Baranski
Date: Mon, 13 Oct 2003 08:26
24 lines
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?
#463
Author: Przemek Wiśniewski
Date: Mon, 13 Oct 2003 09:30
30 lines
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?
#464
Author: Tomasz Baranski
Date: Mon, 13 Oct 2003 09:56
16 lines
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