🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.funkcyjne
Article #911

Re: Przyjemny, elegancki, prosty jezyk funkcyjny

#911
From: Tomasz bla Fortuna
Date: Wed, 16 May 2007 17:08
104 lines
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-mail
References: <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