Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1851 Le 03/12/2010, à 20:55

Pylades

Re : /* Topic des codeurs couche-tard [2] */

En Perl, il y a les opérateurs non-greedy, marqués par un « ? » : ?? *? \+? \{…}?

Chaîne : ab
ab? correspondra à ab, alors que ab?? correspondra à a.

Chaîne : (truc (autre truc) fin)
(.*) correspondra à (truc (autre truc) fin), alors que (.*?) correspondra à (truc (autre truc).

En fait, ces opérateurs font correspondre le moins de texte possible, pas le plus possible.


Il y a aussi peut-être une différence au niveau de l'échappement des opérateurs (un enfer, de s'en rappeler pour chaque version des regex : Perl, basic, extended, Vim, Python…), et très probablement d'autres fonctionnalités supplémentaires (les regex de Perl sont connues pour être les plus complètes).


Sherwood51 a écrit :
Pylade a écrit :

Justement, je ne pense pas que cela soit bien. C'est brider le langage. Par exemple, certains ne voudrons pas rajouter un niveau d'indentation supplémentaire pour leurs fonctions externes (surtout ceux qui ont une niveau d'indentation de huit espaces, je pense ; les méchants tongue). Et bien si l'indentation a une valeur sémantique ils ne peuvent pas…

Je ne suis pas sûr de comprendre ta remarque (je code avec un <TAB> de 8 sur 80 colonnes). Tu pourrais reformuler?

Si tu as un niveau d'indentation large, tu vas peut-être être tenté de ne pas indenter tes fonctions externes, pour ne pas perdre trop de place. En Python, c'est impossible, je trouve ça dommage. Le « les méchants tongue », c'était du troll, je n'aime pas les niveau d'indentation de huit (et encore moins les tabs) ; mais ça c'est purement subjectif.

Dernière modification par Pylade (Le 03/12/2010, à 21:00)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1852 Le 03/12/2010, à 20:58

helly

Re : /* Topic des codeurs couche-tard [2] */

@grim : hey t'as une idée de comment je pourrai faire en haskell pour faire la racine d'un nombre (sqrt n) arrondi à l'entier inférieur ?


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1853 Le 03/12/2010, à 21:01

Pylades

Re : /* Topic des codeurs couche-tard [2] */

floor ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1854 Le 03/12/2010, à 21:01

helly

Re : /* Topic des codeurs couche-tard [2] */

Nan, truncate smile.

truncate (sqrt(fromIntegral n))

Tu haskell aussi Pylade ?

edit : et BN.

Dernière modification par helly (Le 03/12/2010, à 21:44)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1855 Le 03/12/2010, à 21:19

Pylades

Re : /* Topic des codeurs couche-tard [2] */

Non, je n'ai vraiment pas le temps… sad


Tiens, à propos de la gestion des flottants par les versions de Python postérieurs à la 3.1… en fait c'est moins grave que ce que je pensais. Ce n'est toujours pas joli-joli, mais je pense que je vais sortir de ma position et accepter d'utiliser les versions récentes, parce que mine de rien elles apportent des choses (principalement de la rapidité).


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1856 Le 03/12/2010, à 22:10

tshirtman

Re : /* Topic des codeurs couche-tard [2] */

Pylade a écrit :

En Perl, il y a les opérateurs non-greedy, marqués par un « ? » : ?? *? \+? \{…}?

Chaîne : ab
ab? correspondra à ab, alors que ab?? correspondra à a.

Chaîne : (truc (autre truc) fin)
(.*) correspondra à (truc (autre truc) fin), alors que (.*?) correspondra à (truc (autre truc).

En fait, ces opérateurs font correspondre le moins de texte possible, pas le plus possible.


Il y a aussi peut-être une différence au niveau de l'échappement des opérateurs (un enfer, de s'en rappeler pour chaque version des regex : Perl, basic, extended, Vim, Python…), et très probablement d'autres fonctionnalités supplémentaires (les regex de Perl sont connues pour être les plus complètes).

heu oui, je connais le non-greedy…

>>> import re
>>> r = re.compile('ab?')
>>> r.findall('ab')
['ab']
>>> r.findall('a')
['a']
>>> r.findall('aabb')
['a', 'ab']
>>> r.findall('aabab')
['a', 'ab', 'ab']
>>> r2 = re.compile('\(.*\)')
>>> r2.findall('(truc (autre truc) fin)')
['(truc (autre truc) fin)']
>>> r3 = re.compile('\(.*?\)')
>>> r3.findall('(truc (autre truc) fin)')
['(truc (autre truc)']
>>>

(et franchement, je trouve pas ça si dégueu à utiliser)

Hors ligne

#1857 Le 03/12/2010, à 22:44

Pylades

Re : /* Topic des codeurs couche-tard [2] */

Ah, et bien il ne doit pas y avoir beaucoup de différence avec les regex de Perl, alors…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1858 Le 03/12/2010, à 22:45

grim7reaper

Re : /* Topic des codeurs couche-tard [2] */

helly a écrit :

Nan, truncate smile.

truncate (sqrt(fromIntegral n))

Non, floor est plus juste d'un point de vue sémantique.


Sinon, je n'avais jamais regardé la gestion des regexp dans Python.
Bah ça crains, avec les machins genre compile et match on dirait du Java (ou du C, genre ils n'ont pas foutu de niveau d'abstraction au-dessus du C à ce niveau-là...).
Vive les langages qui intègrent nativement et élégamment les regexp : Perl et Ruby (et peut-être Haskell, j'ai pas trop regardé de ce côté là, mais à première vue ça me semble pas dégueu.)


Sinon, pour completer ce qu'a dit Pylade sur Perl, on a aussi les quantifieurs possessifs (ils ne rendent pas ce qu'ils reconnaissent).

"aaaa" =~ /(a+)a/      # $1 contient "aaa"
"aaaa" =~ /(a+?)a/      # $1 contient a
"aaaa" =~ /(a++)a/      # Échoue

Assertion Keep (quand on veut juste détruire une partie du motif)

s/(save)delete/$1/      # Version "traditionnelle"
s/save\Kdelete//         # Préserve la partie gauche de l'assertion (fonctionnement identique, mais plus rapide au niveau du moteur de regexp)

Des verbes de contrôle (un truc cool pour contrôler le backtracking du NFA, chose que je n'ai jamais utilisé et que je serais donc bien incapable de vous expliquer).

Capture numéroté (N positif => référencement usuel, N négatif => référencement arrière relatif)

/(\n+) \s+ \g{-1}/           # \g{-1} = capture précédente

Capture nommée (couplé à 2 variables lexicales que je ne présente pas ici)

/(?<ma_capture>\n+) \s+ \k<ma_capture>/

Un trucs super puissants: les motifs récursifs (je ne vous le présenterais pas non plus car je ne l'ai jamais utilisé).
Mais ça permet, entres autres, de reconnaîtres les parenthèses imbriquées.
On peut coupler ça à des structures conditionnelle dans la regexp avec un yes-no pattern

(?(condition)yes-pattern|no-pattern)

Et encore, là je ne parle que de Perl5 (et que ce je connais sur les regexp de Perl5, il y a peut-être d'autres trucs). Il y a sûrement des trucs qui existe aussi en Python (mais ça m'étonnerait qu'il supporte tout ça).

BN World !

Dernière modification par grim7reaper (Le 03/12/2010, à 23:05)

Hors ligne

#1859 Le 03/12/2010, à 23:21

tshirtman

Re : /* Topic des codeurs couche-tard [2] */

t'aime pas la syntax, qui dépends d'un module au lieu d'être intégré au langage, soit… mais…
http://www.regular-expressions.info/python.html

site a écrit :

The only significant features missing from Python's regex syntax are atomic grouping, possessive quantifiers and Unicode properties.

et pour les possessives quantifier, j'ai peut être mal compris mais:

>>> re.compile('(a+)a').findall('aaaa')
['aaa']
>>> re.compile('(a+?)a').findall('aaaa')
['a', 'a']
>>> re.compile('(a++)a').findall('aaaa')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.6/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.6/re.py", line 245, in _compile
    raise error, v # invalid expression
error: multiple repeat
>>>

Dernière modification par tshirtman (Le 03/12/2010, à 23:22)

Hors ligne

#1860 Le 03/12/2010, à 23:27

Pylades

Re : /* Topic des codeurs couche-tard [2] */

Ben, il n'y a de possessive quantifier que sur la dernière ligne… ^^


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1861 Le 03/12/2010, à 23:55

tshirtman

Re : /* Topic des codeurs couche-tard [2] */

ah, chez lui ça échouait, chez moi aussi (bon, différemment mais bon, j'ai bien dit que j'étais pas sur d'avoir compris ^^) alors…

Hors ligne

#1862 Le 04/12/2010, à 00:00

Pylades

Re : /* Topic des codeurs couche-tard [2] */

Rien à voir ! ^^
Dans le premier cas l'échec est normal, dans le second c'est juste une erreur de syntaxe car la fonctionnalité n'a pas été implémenté…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1863 Le 04/12/2010, à 01:01

compte supprimé

Re : /* Topic des codeurs couche-tard [2] */

Bn;

#1864 Le 04/12/2010, à 02:07

Pylades

Re : /* Topic des codeurs couche-tard [2] */

/me est en train de commencer à rayer l'apprentissage du C++ de sa ToDo list.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1865 Le 04/12/2010, à 03:03

nesthib

Re : /* Topic des codeurs couche-tard [2] */

plop


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1866 Le 04/12/2010, à 03:06

Кຼزດ

Re : /* Topic des codeurs couche-tard [2] */

A


dou

Hors ligne

#1867 Le 04/12/2010, à 03:46

cm-t

Re : /* Topic des codeurs couche-tard [2] */

'Nuit;


Actu Ubuntu            ☺/
Pauses Ubuntu sur Paris            \_< -t
[(π)] La Quadrature du net

Hors ligne

#1868 Le 04/12/2010, à 07:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [2] */

Scores totaux, depuis le début :

1) 1997    nesthib
2) 1910    samuncle
3) 1602    Pylade
4) 1237    Кຼزດ
5) 1029    cm-t
6) 899+5  grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
7) 704    \\Ouranos//
8) 691    Р☢w ! ✰ :mad: ✰ (эй !)
9) 659    helly
10) 431    gnuuat
11) 417    Lagierl
12) 296    tshirtman
13) 196    Askelon
14) 172    nathéo
15) 167    Kanor
16) 121    ǤƦƯƝƬ
17) 93    petifrancais
18) 78    edge_one
19) 70    gulp
20) 68    pierguiard
21) 59    kamui57
21) 59    The Uploader
23) 37    ilagas
24) 32    Le Rouge
25) 30    keny
26) 25    GentooUser
27) 24    ไ୦บเઢ'
28) 20    Morgiver
28) 20    CROWD
30) 19    xapantu
31) 18    Ph3nix_
32) 15    timsy
33) 14    kouskous
34) 12    stratoboy
34) 12    sailing
36) 11    alexises
36) 11    Crocoii
38) 10    Toineo
38) 10    NutMotion
38) 10    pseudovingtcinqcaracteres
38) 10    pfriedZ
42) 8    Mornagest
42) 8    Sherwood51
44) 7    Vista
45) 6    Zeibux
45) 6    ubuntlin
45) 6    asma.geek
48) 5    tendances-tdct
48) 5    Steap
50) 4    danychou56
50) 4    Neros
50) 4    Biaise
50) 4    totoflute
50) 4    pinballyoda ㋛
55) 2    SoJaS
55) 2    ceric
57) 1    geenux

chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,fbf9f4&chl=00h%20-%2000h59|01h%20-%2001h59|02h%20-%2002h59|03h%20-%2003h59|07h%20-%2007h59|16h%20-%2016h59|17h%20-%2017h59|19h%20-%2019h59|20h%20-%2020h59|21h%20-%2021h59|22h%20-%2022h59|23h%20-%2023h59&chd=t:1,1,1,3,2,5,1,6,4,3,3,3&chp=1.6&chtt=R%C3%A9partition%20des%20posts&chts=606060,16chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,10&chxr=1,0,10&chf=b0,lg,0,803000,0,ffc080,1|bg,s,fbf9f4&chxl=0:|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:0,0,2,0,0,0,0,0,0,0,0,5,1,0,6,4,3,3,3,1,1,1,3,0&chm=N,803000,0,-1,12&chtt=|Nombre%20de%20posts%20par%20heure&chts=606060,16


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1869 Le 04/12/2010, à 07:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [2] */

Scores de la période en cours :

1) 22    cm-t
2) 20    samuncle
2) 20    nesthib
2) 20    Кຼزດ
5) 15    Pylade
6) 12    grim7reaper
7) 9    Lagierl
8) 5    \\Ouranos//
9) 4    gnuuat
10) 3    helly
10) 3    tshirtman

Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1870 Le 04/12/2010, à 09:58

grim7reaper

Re : /* Topic des codeurs couche-tard [2] */

Hello World !


tshirtman a écrit :

t'aime pas la syntax, qui dépends d'un module au lieu d'être intégré au langage, soit…

Oui, mais on s'en fout de ça. C'est un avis perso totalement influencé par le fait que j'ai découvert les regexp avec la syntaxe Perl.

mais…
http://www.regular-expressions.info/python.html

site a écrit :

The only significant features missing from Python's regex syntax are atomic grouping, possessive quantifiers and Unicode properties.

Ouais, là on a un bel exemple de ce que dis Pylade sur la communauté Python. Genre, on n'a pas implémenté un truc parce qu'en fait c'est nul (je caricature bien sûr)…
Les motifs récursifs c'est pas de insignifiant pour moi. Qu'ils ne veulent pas l'implémenter OK, c'est leur choix et je n'ai rien à redire là dessus. Qu'ils jugent ça insignifiant pour se justifier non. Pour moi, ça prouve bien qu'ils se croient au-dessus des autres langages…

Quand aux verbes, je ne sais pas si Python les supporte… Il apraît que ça a été intégré à PCRE et Python semble suivre PCRE (du moins j'espère pour lui) mais je ne trouve pas de trace de code Python utilisant les verbes…

Et sinon, l'unicode dans les regexp c'est vraiment un truc indispensable. J'espère que c'est prévu pour une version de Python 3.

et pour les possessives quantifier, j'ai peut être mal compris mais:

Oui, mais Pylade à déjà répondu.

Sinon, j'ai retrouvé le lien en rapport avec la vidéo dont j'ai tiré ces infos.
Ça date, Perl 5.10 à 3 ans (on est à Perl 5.12 actuellement, je ne suis pas trop au courant des avances à ce niveau là).

Dernière modification par grim7reaper (Le 04/12/2010, à 10:03)

Hors ligne

#1871 Le 04/12/2010, à 10:11

tshirtman

Re : /* Topic des codeurs couche-tard [2] */

@Pylade: \o/

@grim: 1/c'est pas la communauté python, c'est un site sur les regex, au cas ou t'aurais pas vu, et il parle d'un certain nombre de langages (dont bien sûr perl, mais la plupart des langages un peu usités). C'est eux qui jugent de ce qui est significatif, pas moi…

Ils disent que PCRE implémente pratiquement tout (de la syntaxe perl 5.8).

Après oui, j'ai pas dit que python était le meilleurs langages pour les regex, j'ai dis que je voulais bien connaitre les différences… apparemment c'est dans des usages assez avancés…

Hors ligne

#1872 Le 04/12/2010, à 10:26

grim7reaper

Re : /* Topic des codeurs couche-tard [2] */

tshirtman a écrit :

@grim: 1/c'est pas la communauté python, c'est un site sur les regex, au cas ou t'aurais pas vu, et il parle d'un certain nombre de langages (dont bien sûr perl, mais la plupart des langages un peu usités). C'est eux qui jugent de ce qui est significatif, pas moi…

Houla, la bourde, mea culpa. J'ai vu Python dans l'URL et la page ne parlait que de Python donc je n'ai pas cherché plus loin (c'est vrai que j'aurais dû).

Après oui, j'ai pas dit que python était le meilleurs langages pour les regex, j'ai dis que je voulais bien connaitre les différences… apparemment c'est dans des usages assez avancés…

Oui, c'est sûr que c'est dans les usages avancés. Moi même je n'ai jamais utilisé les motifs récursifs et les verbes. Bon, par contre pour l'unicode c'est vraiment dommage.

Hors ligne

#1873 Le 04/12/2010, à 10:38

tshirtman

Re : /* Topic des codeurs couche-tard [2] */

Oui, avant python3 l'état de l'unicode était clairement en dessous de ce qu'on pouvait attendre d'un tel langage, les changements effectués depuis cette version devraient permettre de corriger les problèmes dans les modules de ce type.

Hors ligne

#1874 Le 04/12/2010, à 10:45

grim7reaper

Re : /* Topic des codeurs couche-tard [2] */

Et bien c'est une bonne nouvelle ça smile.
Pylade aura une raison de moins de râler, et moi j'aurais un argument de moins pour troller tongue.

Dernière modification par grim7reaper (Le 04/12/2010, à 10:45)

Hors ligne

#1875 Le 04/12/2010, à 12:21

helly

Re : /* Topic des codeurs couche-tard [2] */

Hey grim, j'ai un truc bizarre :
J'essaye de faire l'exo 4 de Euler ( trouver le plus petit nombre divisble par [1..20]) et j'ai l'impression d'avoir un problème à chaque fois que j'utilise la tabulation !
J'ai donc essayé le code du tuto :

 import System.Environment
import Data.Int
  
bmiTell :: (RealFloat a) => a -> String
bmiTell bmi
    bmi <= 18.5 = "plop"
    bmi <= 25.5 = "plouf"
    otherwise = "bof"

Et à chaque fois, ça me dit :

4.hs:5:0: Parse error in pattern

T'as une idée du problème ?

Dernière modification par helly (Le 04/12/2010, à 12:21)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne