Article View: pl.comp.lang.funkcyjne
Article #415Re: Mozart-OZ
From: DecatonE
Date: Sat, 04 Oct 2003 17:44
Date: Sat, 04 Oct 2003 17:44
105 lines
3696 bytes
3696 bytes
Andrzej Wasowski...
> Niestety nie mam czasu się za to wziąć, ale jakbyś opisał na grupę
> swoje doświadczenia, plus jakieś ciekawsze elementy kodu -- to ja
> bardzo chętnie.
Ok...
Na początek powstrzymuję się od szerszych opinii.
Język wydaje się być rozbudowany, pomysłowy i wydajny, zwłaszcza
jeżeli chodzi o programowanie wielowątkowe.
W praktyce wygląda to na połączenie "lispa" (paradygmat funkcjonalny)
z elementami obiektowymi + jakieś inne pomysły, których jeszcze
nie rozgryzłem (cells, junks (tu są mapy, słowniki etc.), port
(komunikacja) i inne)...
Ciekawsze fragmenty kodu z tutoriala:
declare Insert in
proc {Insert Key Value TreeIn ?TreeOut}
case TreeIn
of nil then TreeOut = tree(Key Value nil nil)
[] tree(K1 V1 T1 T2) then
if Key == K1 then TreeOut = tree(Key Value T1 T2)
elseif Key < K1 then T in
TreeOut = tree(K1 V1 T T2)
{Insert Key Value T1 T}
else T in
TreeOut = tree(K1 V1 T1 T)
{Insert Key Value T2 T}
end
end
end
declare Tr1 Tr2 Tr3 in
{Insert 10 a nil Tr1}
{Insert 16 c {Insert 15 b Tr1} Tr2}
{Browse Tr2}
Figure 5.3: Tree insertion using case statement
Mała legenda (i dużo się wyjaśni):
"declare Insert in [...]" - wprowadzenie zasięgu dla zmiennej Insert
(do końca pliku chyba) - inna wersja "local Insert in [...] end".
Insert - nazwa procedury
Key, Value, TreeIn - parametry wejściowe
TreeOut - parametr wyjściowy
Wywołanie funkcji {Nazwafunkcji par1 par2 parWyj},
czasami opuszcza się parWyj, tu jest dowolność, ale
nie jestem pewien do końca czemu (podejrzewam, że żeby
umożliwić kilka par. wyjściowych).
case E of Pattern_1 then S1
[] Pattern_2 then S2
[] ...
else S end
To wyżej to wiadomo.
TreeOut = tree(K1 V1 T T2)
Utworzenie krotki.
Funkcja {Browse param} wypisuje w oknie wartość parametrów.
Dla w/w przykładu wypisze:
tree(10 a nil tree(15 b nil tree(16 c nil nil)))
Czyli drzewko...
Inny przykład:
declare Map in
fun {Map Xs F}
case Xs
of nil then nil
[] X|Xr then {F X}|{Map Xr F}
end
end
{Browse {Map [1 2 3 4] fun {$ X} X*X end}}
Funkcja Map przyjmuje na wejściu dwa parametry:
Xs i F, pierwszy to lista (tu: [1 2 3 4])
po której sobie rekurencyjnie chodzi wywołując
dla każdego elementu funkcję F poprzez: {F X}.
Miłe, szybkie i przyjemne :)
Tu wynik [1 3 9 16]
Wątki tworzy się tak:
thread [...] end
:)
Tyle z podstaw.
adam
--
[ rectifier[X]mesa.eu.org : mail ]
[ http://www.mesa.eu.org : home ]
Technical Details
Message-ID:
<Xns940AC8C0FF73Dzdomu@127.0.0.1>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mailReferences:
<Xns940A1B5DFE2AEzdomu@127.0.0.1> <s99ekxtc6rx.fsf@localhost.localdomain>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: DecatonE <news01@skasuj.mesa.eu.org>
Newsgroups: pl.comp.lang.funkcyjne
Subject: Re: Mozart-OZ
Date: Sat, 04 Oct 2003 19:44:05 +0200
Organization: news.onet.pl
Lines: 105
Sender: szladam@poczta.onet.pl@vf28.neoplus.adsl.tpnet.pl
Message-ID: <Xns940AC8C0FF73Dzdomu@127.0.0.1>
References: <Xns940A1B5DFE2AEzdomu@127.0.0.1> <s99ekxtc6rx.fsf@localhost.localdomain>
NNTP-Posting-Host: vf28.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1065289447 2611 80.50.233.28 (4 Oct 2003 17:44:07 GMT)
X-Complaints-To: abuse@onet.pl
NNTP-Posting-Date: 4 Oct 2003 17:44:07 GMT
User-Agent: Xnews/5.02.24 Mime-proxy/1.2.c.0 (Win32)
X-face: %*W*;[JzU~jUlkH7O[py6D%P#eC9KGNQ`l@KoUxem0i7wJ^/!"gQ>`|Te[Xc-.pl%si91W-SanXs.v\xIwAf"Di#x2HzXPusLGo{Ei-/CQ,JT`Zn,v$S"w$kx$314_{dp77-e\${a0Y^Vs#(bFH9fejN_FJRRdxYjt{_>qI`fwo164Ygx3Y-pdW&>oXqKrLH?Po^TUr'TV&7j}vgcZ[jP=&"xzB*.*KnSyJ_h~
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit