Retourner au contenu associé (journal : A mort les boucles)
Posté par Ontologia (site web personnel) le 18 avril 2007 à 11:16. En réponse au journal A mort les boucles. Évalué à 2.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: Ruby
Posté par Ontologia (site web personnel) . En réponse au journal A mort les boucles. Évalué à 2.
En lisaac, le for est un message de INTEGER
1.to 10 do { i.print;};
Il prend en paramètre un BLOCK, c à d, une liste d'instruction, auquel il donne la valeur de i en argument.
De la même manière, grâce au type block, tu peux faire des map/fold/filter à pas cher.
Dans COLLECTION :
- map blc : BLOCK : SELF<- (
+ result : SELF := SELF.create 0;
lower.to upper do { i : INTEGER;
result.add (blc.value item i);
};
result
);
donc ça donnerai
montab.map { elt : TABLO;
elt.print;
};
Oui faut déclarer un elt, donc c'est plus un foreach en fait.
Mais tu as ça à la vitesse du C**
Je me suis amusé à faire joujou avec les listes à la caml, du genre
let rec toto = function
[] -> 0 |
e::[] -> e |
t::q -> 10+t+toto q;;
Les fonctions dans COLLECTION :
- when_empty blc : BLOCK <- (
blc.value;
);
- when_alone blc : BLOCK <- (
(count = 1).if {
blc.value first;
};
);
when_list blc : BLOCK <- (
(count > 1).if {
blc.value first,(slice (lower+1) to upper);
};
);
Ca permettra de faire :
+ lst : LIST[INTEGER_32].create 5;
+ res : INTEGER_32;
lst.add 1;
lst.add 2;
lst.add 3;
lst.add 4;
lst.add 5;
lst.when_empty {res := 1;};
.when_alone {
x : INTEGER_32;
res := x;
};
.when_list {
x : INTEGER_32;
y : LIST[INTEGER_32]
res := 10+x+y.map {x,y : INTEGER_32; x+y};
};
* Oui je sais, je l'avais pas encore faite ;-)
** http://isaacos.loria.fr/li_benchs.html
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker