Cours de J (Leçon 5)

par Michel J.Dumontier

 

Définitions de fonctions

 

Rappel : ce qui suit est le résultat de l'exécution d'un script J.

Les instructions sont en gras (sauf les NB.), les variables, verbes et expressions sont aussi en gras dans les commentaires, le tout, en police « Courrier New » car pour la police ISIJ, il est très difficile de distinguer le gras du non gras.

Par souci d'homogénéité les résultats sont aussi dans la même police sauf lorsqu'il est nécessaire de les mettre en police ISIJ. (Les accents des commentaires ont été rajoutés).

 

   NB. RAPPELS:

  

   NB. Les fonctions sont ambivalentes

   NB. Pas d'ordre hiérarchique des fonctions

   NB. Les verbes sont des actions (fonctions)

   NB. Les adverbes et les conjonctions modifient les verbes

   NB. Les vecteurs, matrices, tableaux sont des entités

   NB. On peut assigner des noms à des fonctions:

   NB. somme =. +/

   NB. compte=. #

   NB. moyenne =. somme % compte

   NB. _ représente l'infini, __ représente moins l'infini (-_)

  

   NB. DEFINITION TACITE

  

   NB. LA PROGRAMMATION TACITE ou FONCTIONNELLE

   NB. NE NÉCESSITE PAS D'ARGUMENTS EXPLICITES.

  

   NB. Un train de verbes est composé de 2 ou 3 verbes ou plus

  

   NB. Une FOURCHE monadique (trident)

   NB. (f g h) y est équivalent à

   NB. (fy) g (h y)

  

   moy=. +/ % #

  

   ]a=.i.5

0 1 2 3 4

   moy a

2

  

   NB. Utilisation de RACINE diadique

  

   NB. moyenne géométrique: # %: */

   NB. #ème racine du produit

   mg=.# %: */

   ]b=.>:a

1 2 3 4 5

   mg b

2.60517

   */b

120

   (mg b)^5

120

  

   NB. Une FOURCHE diadique

   NB. x (f g h) y est équivalent à

   NB. (x f y) g (x h y)

  

   5 (+ * -) 4  NB. (5+4)*(5-4) => (25-16)

9

  

   NB. Un train de 2 verbes est un CROCHET

   NB. (g h) y est équivalent à

   NB. y (g h) y

  

   (*>:) 1 2 3  NB. (1 2 3) * (2 3 4)

2 6 12

  

   NB. x (g h) y est équivalent à

   NB. x g (h y)

  

   3 4 (*>:) 1 2  NB. (3 4) * (2 3)

6 12

  

   NB. CAPTURE de verbes

  

   +/ + * - 2 3 4

_3

  

   +/ (+ * -) 2 3 4

_29

  

   c=. [: +/ + * -

  

   c 2 3 4

_29

  

   NB. [: capte une branche d'une fourche:

   NB. ici, +/ est appliqué au résultat

   NB. de la fourche + * -

  

   NB. CAS :

  

   NB. l'argument gauche spécifie

   NB. le cas monadique et le droit

   NB. donne le cas diadique.

  

   log=. 10&^. : ^.

  

   a=. 1x1, 10 100

   ^. a

1 2.30259 4.60517

   log a

0.4342945 1 2

   1x1 log a

1 2.30259 4.60517

  

  

   NB. Rappel de la conjonction AVEC &

   NB. Voir Leçon 4

  

   carre=.^&2

   carre 3 7

9 49

   racinecarree=. ^& 0.5

   racinecarree carre 3 7

3 7

  

   NB. Conjonction AUDESSUS  @

  

   troisfois2puissance=. (3&*)@(2&^)

   troisfois2puissance 2 3

12 24

   amoinsbpuissance3=.^&3@-

  

   NB. Les adverbes et les conjontions sont

   NB. exécutés avant les verbes

  

   3 4 5 6 amoinsbpuissance3 6 5 4 3

_27 _1 1 27

  

   (3 4 5 6-6 5 4 3)^3

_27 _1 1 27

  

   NB. La conjonction PUISSANCE agit sur les verbes comme

   NB. la puissance agit sur les nombres

  

   NB. f ^: 2 est équivalent à  f f

  

   b=.>:i.5

   b^2

1 4 9 16 25

   %: b^2

1 2 3 4 5

   %: b^4

1 4 9 16 25

   %: ^:2 b^4

1 2 3 4 5

   %:%:%:b^8

1 2 3 4 5

   %: ^:3 b^8

1 2 3 4 5

  

   NB. L'infini utilisé en puissance pour les fonctions:

   NB. Exemple: algorithme convergent,

   NB. Solution de y = cos y

  

   cos=.2&o. NB. cosinus est la 2ième fonction circulaire

   d=.1

   ]y=. cos ^: _ d

0.7390851

   y=cos y

1

  

   NB. Definition de la fonction inverse par

   NB. la conjonction puissance.

   NB. avec l'argument _1

  

   %: ^: _1 b

1 4 9 16 25

   e=.0.6

   %: ^: _ e

1

  

   NB. Calcul de la constante d'Euler e= 2.718281828...

   NB. si nous calculons (1+1%_)^_ nous obtiendrons 1 à la

   NB. puissance l'infini ce qui donne 1.

  

   (1+1%_)^_

1

  

   NB. il faut lier les infinis: écrivons donc la fonction e

   NB. et on l'appliquera à un argument x que l'on fera tendre

   NB. vers l'infini.

  

   e=.>:&% ^ ]

   e 10

2.59374

   e 100

2.70481

   e 1000

2.71692

   e 10000

2.71815

   11.7 ": e 100000000

  2.7182818

  

   NB. DEFINITION EXPLICITE D'UNE FONCTION

  

   NB. DEFINITION D'UNE FONCTION MONADIQUE

  

   ee=. 3 : 0

(>:%y.)^y.

:

1 NB. ici on mettrait la définition diadique

)

   e     NB. forme tacite

>:&% ^ ]

   ee    NB. forme explicite

3 : 0

(>:%y.)^y.

:

1 NB. ici on mettrait la définition diadique

)

  

   e 10  NB. forme tacite

2.59374

   ee 10 NB. forme explicite

2.59374

  

   e 10000

2.71815

   ee 10000

2.71815

  

   NB. On peut définir directement

   NB. une fonction f=.  3 : 0)

   NB. une conjonction conj=. 2 : 0

   NB. un adverbe adv=. 1 : 0

  

   NB. On peut définir aussi un "script"

   NB. s=. 0 : 0 et l'utiliser pour définir

   NB. un verbe, une conjonction ou un adverbe

   NB. par (3 : s), (2 : s), (1 : s)

   NB. aussi un substantif par (0 : s)

  

   NB. exemple:

  

   carre=.*:

  

   s=. 0 : 0

carre y.

:

(carre x.)+carre y.

)

  

   f=.(3 : s)

   f 3 4 5

9 16 25

   3 f  4

25

  

   NB. ASSIGATION GLOBALE ET LOCALE

   NB. DANS LES FONCTIONS

  

   a=.i.3 4

  

   f=. 3 : 0

1

:

a=.2 NB. assignation locale

bb=:3 NB. assignation globale

a+bb

)

   2 f 3

5

   a

0 1  2  3

4 5  6  7

8 9 10 11

   bb

3

  

   NB. FIXATION DE FONCTIONS

  

   NB. ajout de 1 à la fonction de tirage aléatoire (à cause

   NB. de l'origine 0)

   alea=.>:@?

   loto=.alea

   monloto=.loto f.

   4 loto 4

4 2 1 3

   4 monloto 4

3 1 2 4

   alea=.? NB. redéfinition de la fonction alea normale

   4 loto 4

2 1 3 0

   4 monloto 4

1 4 2 3

   6 monloto 49 NB. pour avoir un loto correct

25 24 33 1 23 47

  

   NB. Pour mettre une valeur dans un tableau

  

   MONTRE=.]

   PREND =.{.

   LAISSE=.}.

   MONTRE alpha=.26 PREND 65 LAISSE a.  

ABCDEFGHIJKLMNOPQRSTUVWXYZ

   MONTRE x=.4 5$alpha

ABCDE

FGHIJ

KLMNO

PQRST

  

   in=. 3 : 0

1

:

(_1{.x.)+(1{.x.)*_1{.$y.

)

   NB.    'a' (1 2 in x)}x   fonctionnait, bien que peu

   NB. orthodoxe !

   NB. il a fallu la compliquer pour obtenir ce qui était

   NB. désiré

  

   ($x)$ 'a' (1 2 in x) } ,x

ABCDE

FGaIJ

KLMNO

PQRST

 

 

(à suivre...)