Disons que j'ai l'expression J suivante:Comment définir une fonction monadique pour travailler sur une liste dans J?
# 3 ((|=0:)#]) 1+i.1000
Ce compte le nombre de nombres compris entre 1 et 1000 qui sont divisibles par 3. (maintenant, avant que quelqu'un signale qu'il ya un moyen plus facile de le faire , cette question est sur la syntaxe de J, et non mathématiques)
Disons que je définir une fonction monadique pour cela, comme suit:.
f =: monad define # y ((|=0:)#]) 1+i.1000 )
Cela fonctionne très bien avec un seul argument, par exemple,
f 4 250
Si je passe une liste, je reçois une erreur de longueur:
f 1 2 3 |length error: f
Maintenant, je comprends parfaitement pourquoi je reçois l'erreur de longueur . Lorsque vous remplacez la liste 1 2 3
pour l'argument y
de la monade, vous obtenez:
# 1 2 3 ((|=0:)#]) 1+i.1000
Si vous savez quoi que ce soit au sujet de J, il est assez clair pourquoi l'erreur de longueur se produit. Donc, je n'ai pas besoin d'explication de cela.
Je veux définir la fonction telle que, lorsque je passe une liste, elle retourne une liste, par exemple,
f 1 2 3 1000 500 333
Comment puis-je (a) redéfinir cette fonction pour prendre une liste et retourner une liste ou (b) obtenir la fonction de travailler sur une liste telle quelle sans être redéfinie, peut-être en utilisant un adverbe ou une autre technique?
Je viens de me rendre compte que la vraie réponse est 'f" 0] 1 2 3' utilisant la conjonction _rank_ (le superflu ']' m'empêche d'avoir à utiliser des parenthèses.) –