Imaginez que j'ai défini le nom suivant dans J:Comment puis-je définir un verbe dans J qui applique alternativement un verbe différent à chaque atome d'une liste?
m =: >: i. 2 4 5
Cela ressemble à ce qui suit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Je veux créer un verbe monadique de rang 1 qui s'applique à chaque liste dans cette liste des listes. Il va doubler (+:
) ou ajouter 1 (>:
) à chaque élément alternatif dans la liste. Si nous devions appliquer ce verbe à la première ligne, nous obtiendrions 2 3 6 5 10
.
Il est assez facile d'obtenir une liste de booléens qui alternent avec chaque élément, par exemple, 0 1 $~{:$ m
nous donne 0 1 0 1 0
. Je pensais, aha! Je vais utiliser quelque chose comme +:
` >: @.
suivi d'une expression, mais je ne pourrais jamais vraiment le faire fonctionner.
Des suggestions?
MISE À JOUR
qui suit semble fonctionner, mais peut-être il peut être quelque chose de plus remaniée avec élégance par un pro J.
poop =: monad define (($ y) $ 0 1 $~{:$ y) ((]+:)`(]>:) @. [)"0 y )
Merci à David, la réponse finale semble être, @ (+: '>: /.)" 1 –