@@ -15,12 +15,12 @@ Voir <http://microalg.info>.")
1515" Booleen?"
1616" Concatener"
1717" Definir" " Demander"
18- " En_position" " Et" " Exemples_de"
18+ " En_position" " Entier@ " " Et" " Exemples_de"
1919" Faire"
2020" Faux" " Faux?"
2121" Initialiser"
2222" Liste" " Liste?" " Longueur"
23- " Nieme" " Nombre" " Nombre?" " Non"
23+ " Nieme" " Nieme@ " " Nombre" " Nombre?" " Non"
2424" Ou"
2525" Queue"
2626" Retirer_de" " Retourner" " Rien"
@@ -397,29 +397,63 @@ alors l’élément à la `idx` ième position dans `var` est affecté de la val
397397(setq En_position 'En_position)
398398
399399# Tirages pseudo-aléatoires.
400- (put 'Decimal@ 'doc
401- " Retourne un nombre décimal pseudo-aléatoire dans [0;1[.
402-
403- Le suffixe `@` indique le caractère pseudo-aléatoire de cette commande." )
404- (put 'Decimal@ 'text " Commande `Decimal@`." )
405- (de Decimal@ () (/ (+ 2147483648 (rand)) 4294967296 ))
406400(put 'Entier@ 'doc
407- " Retourne un nombre entier pseudo-aléatoire dans [`min`;`max`].
401+ " Retourne un nombre entier pseudo-aléatoire dans [`min`;`max`] (les deux
402+ paramètres entiers).
403+
404+ : (Entier@ 1 6)
405+ -> 2
406+ : (Entier@ 1 6)
407+ -> 6
408408
409409Le suffixe `@` indique le caractère pseudo-aléatoire de cette commande." )
410410(put 'Entier@ 'text " Commande `Entier@`." )
411- (de Entier@ arg_lst (let (nbr_args (length arg_lst))
412- (if (<> 2 nbr_args)
413- (quit (pack " `Entier@` prend 2 paramètres. "
414- " Vous en donnez " nbr_args " ." ) )
415- )
416- )
417- (let (min (eval (car arg_lst))
418- max (eval (cadr arg_lst)))
419- (ifn (num? min) (quit " Le premier paramètre de `Entier@` doit être un nombre." ))
420- (ifn (num? max) (quit " Le second paramètre de `Entier@` doit être un nombre." ))
421- (rand min max)
422- )
411+ (de Entier@ (!min !max !rien_ici)
412+ # Quelques vérifications
413+ (ifn (and !min !max) (quit " `Entier@` prend deux paramètres (entiers)." ))
414+ (if !rien_ici (quit " `Entier@` ne prend que deux paramètres (entiers)." ))
415+ (cond
416+ ((<> !min (format (round !min 0 ) 0 " ." " ," ))
417+ (quit " Le minimum de `Entier@` n’est pas entier." !min))
418+ ((<> !max (format (round !max 0 ) 0 " ." " ," ))
419+ (quit " Le maximum de `Entier@` n’est pas entier." !max))
420+ ((!boolM2P (> !min !max))
421+ (quit " Le minimum et le maximum de `Entier@` ne sont pas dans l’ordre." ))
422+ )
423+ # Le calcul
424+ (rand !min !max)
425+ )
426+ (put 'Nieme@ 'doc
427+ " Retourne un élément choisi pseudo-aléatoirement dans la liste ou le texte
428+ fourni en paramètre.
429+
430+ : (Nieme@ (Liste 13 666 2015))
431+ -> 2015
432+ : (Nieme@ (Liste 13 666 2015))
433+ -> 666
434+ : (Nieme@ \" bonjour\" )
435+ -> n
436+ : (Nieme@ \" bonjour\" )
437+ -> o
438+
439+ Le suffixe `@` indique le caractère pseudo-aléatoire de cette commande." )
440+ (put 'Nieme@ 'text " Commande `Nieme@`." )
441+ (de Nieme@ (obj !rien_ici)
442+ # Quelques vérifications
443+ (setq !onppeuv " `Nieme@` ne peut pas extraire un élément pseudo-aléatoire " )
444+ (cond
445+ ((num? obj) (quit (pack !onppeuv " d’un nombre." ) obj))
446+ ((== obj 'Vrai) (quit (pack !onppeuv " du booléen Vrai." )))
447+ ((== obj 'Faux) (quit (pack !onppeuv " du booléen Faux." )))
448+ ((== obj 'Rien) (quit (pack !onppeuv " de Rien." )))
449+ )
450+ (if !rien_ici (quit " `Nieme@` ne prend qu’un paramètre (liste ou texte)." ))
451+ # Le calcul
452+ (cond
453+ ((!boolM2P (Liste? obj)) (nth> obj (rand 1 (length> obj))))
454+ ((str? obj) (car (nth (chop obj) (rand 1 (length obj)))))
455+ (T Rien)
456+ )
423457)
424458
425459# Demander.
0 commit comments