Article View: pl.comp.lang.funkcyjne
Article #911Re: Przyjemny, elegancki, prosty jezyk funkcyjny
From: Tomasz bla Fortuna
Date: Wed, 16 May 2007 17:08
Date: Wed, 16 May 2007 17:08
104 lines
3043 bytes
3043 bytes
Dnia 15 May 2007 15:33:42 -0700
pawellt@gazeta.pl napisał(a):
> Poza tym sama kwestia obiektowosci. W Scheme masz cos w stylu:
>
> (define samochod-class
> (make-standard-class
> 'superclass #t
> 'slots '(frame parts size)
> 'method-names '()))
>
> Chociażby kwestia definicji klas w Dylanie:
>
> define class <kolor-okna> (<okno>)
> end class;
>
> ... i już masz definicje klasy "kolor-okna" dziedziczącą po klasie
> "okno".
> Chcesz to samo z atrybutuami (slotami) - wystarczy:
>
> define class <kolor-okna> (<okno>)
> slot typ_koloru;
> slot kod_koloru;
> end class;
>
> Chcesz dodać do powyzszego metode, wystarczy:
>
> define method hello-world() => ();
> puts("Hello, world!");
> end method;
>
No to może przykład w Camlu:
open Printf
class pojazd model =
object
val model = model; (* Nie zmienny po utworzeniu... *)
val mutable predkosc = 0; (* Musi być zainicjalizowane *)
method gaz n =
predkosc <- n;
printf "%s ma prędkość %d\n" model predkosc;
method stop =
predkosc <- 0;
printf "%s zatrzymany\n" model
end;;
(* Wykorzystanie *)
let rower = new pojazd "Rower";;
rower#gaz 5;;
rower#stop;;
(* Klasa dziedzicząca *)
class samochod model =
object
inherit pojazd ("Samochód " ^ model)
method swiatla w =
if w = true then
printf "Światła włączone\n"
else printf "Światła wyłączone\n";
end;;
let volvo = new samochod "Volvo";;
volvo#swiatla true;
volvo#stop;;
> Albo wygodne funkcje/metody w stylu:
>
> define method rozmiar_buta(osoba :: <string>)
> if (osoba = "Jasio")
> 14;
> else
> 11;
> end if;
> end method;
>
let rozmiarButa osoba =
if osoba = "Jasio" then
14
else
11;;
print_int (rozmiarButa "Jasio")
W sumie program wyświetli:
Rower ma prędkość 5
Rower zatrzymany
Światła włączone
Samochód Volvo zatrzymany
14
IMHO czystszy w obiektowości i od Dylana i od Lispa. ;)
--
Tomasz bla Fortuna
jid: bla(at)af.gliwice.pl
pgp: 0x90746E79 @ pgp.mit.edu
Technical Details
Message-ID:
<20070516190836.410b64c7@Vorago>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.pl!not-for-mailReferences:
<1179163778.661628.303210@h2g2000hsg.googlegroups.com> <f2ak3b$rpj$1@nemesis.news.tpi.pl> <1179268422.157417.102270@o5g2000hsb.googlegroups.com>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!newsfeed.silweb.pl!polsl.pl!not-for-mail From: Tomasz bla Fortuna <bla@thera.be> Newsgroups: pl.comp.lang.funkcyjne Subject: Re: Przyjemny, elegancki, prosty jezyk funkcyjny Date: Wed, 16 May 2007 19:08:36 +0200 Organization: Politechnika Slaska, Gliwice Lines: 122 Message-ID: <20070516190836.410b64c7@Vorago> References: <1179163778.661628.303210@h2g2000hsg.googlegroups.com> <f2ak3b$rpj$1@nemesis.news.tpi.pl> <1179268422.157417.102270@o5g2000hsb.googlegroups.com> NNTP-Posting-Host: afdns.sownet.pl Mime-Version: 1.0 X-Trace: polsl.pl 1179335301 14120 195.82.188.30 (16 May 2007 17:08:21 GMT) X-Complaints-To: news@polsl.pl NNTP-Posting-Date: Wed, 16 May 2007 17:08:21 +0000 (UTC) X-Newsreader: Claws Mail 2.9.1 (GTK+ 2.10.12; x86_64-pc-linux-gnu) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit