[nem-pl] Zmiany składniowe

Michal Moskal malekith at pld-linux.org
Wed Oct 15 17:18:13 CEST 2003


On Wed, Oct 15, 2003 at 04:55:24PM +0200, Kamil Skalski wrote:
> > Zamiast let może jakieś inne słowo, np. val. Na pewno coś krótkiego.
> > 
> 
> let mi sie podoba, na chama mogloby byc nawet
>   let x be Nil in
> albo
>   let x denote 7 in

Yuck!

> ale ostatecznie tak jak jest = wydaje sie w porzadku
>
> podsumowujac, podoba mi sie tak:
> let ref x <- 5 in
> let y = 0 in
> x <- y

Chodzi o to, że jeśli robisz coś w miedzyczasie imperatywnie, to Ci się
kod coraz bardziej wysuwa w prawo i np. zmieniasz kolejność letów żeby
tego uniknąć, albo jeszcze jakieś inne sztuczki robisz. Z drugiej strony
jeśli zamiast "in" byłby ";" to nie byłoby tego problemu, tylko jak dla
mnie ";" gryzie się z "let" (to tak jakby zakres "let" kończył się na ";",
a on idzie dalej). Z drugiej strony "val x = 3;" jest chyba jasne, że
definuje wartość, do użycia również dalej.

Może jakoś tak:

  {
    ref x <- 3;
    val y = 0;
    x <- y;
    val quxx = x + y;
    x <- quxx;

    fun foo () : void { bar () }
    and bar () : void { foo () };

    foo ();
    bar ();
  }

Może też zamiast ref "val ref" a zamiast fun "val fun". Choć nie wydaje
mi się.

Chodzi mi o to, żeby nie utrudniać niepotrzebnie programowania
imperatywnego, jeśli nie ma po temu dobrych powodów. Jeśli ktoś pisze
funkcjonalnie to zamiast:

  let x = foo (y) in
  let z = bar (x, x) in
  (z, x)

Bedzie miał:

  {
    val x = foo (y);
    val z = bar (x, x);
    (z, x)
  }

Co jest IMHO podobnie czytelne. Można by się wręcz kłócić, że z val jest
lepiej :-)

-- 
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h




More information about the devel-pl mailing list