Question

Je viens juste de commencer à essayer de ramasser la langue J, et je suis confus par ce qui suit:

   1 2 +/@{ i.4
1 2
   +/ 1 2 { i.4
3

dans la documentation @ il est dit: "x u @ v u x y ↔ v y"

Je suppose que je suis juste une partie confondant de la parole pour une autre, mais ne peut pas le comprendre

aussi, comment puis-je dire quel type de discours est un nom?

Était-ce utile?

La solution

   NB. u b. 0 returns the rank of u
   NB. the rank of a verb determines the arguments it applies to at a time
   NB. monadic + y applies to atoms; dyadic x + y applies to pairs of atoms
   + b. 0
0 0 0
   NB. monadic +/ y and dyadic x +/ y apply to anything (unbounded rank)
   +/ b. 0
_ _ _
   NB. monadic { y applies to arrays of atoms;
   NB. dyadic x { y applies to pairs of atoms and anything
   { b. 0
1 0 _
   NB. u @ v has the rank of v
   +/@{ b. 0
1 0 _
   NB. since 1 2 { i.4 returns atoms at a time, +/ works on atoms
   +/"0 [ 1 2 { i.4
1 2
   NB. u @: v has unbounded rank
   +/@:{ b. 0
_ _ _
   NB. +/ applies to all of 1 2 { i.4 at once
   +/"_ [ 1 2 { i.4
3

   NB. mechanical translation to tacit form
   13 : '+/ x { y'
[: +/ {

Autres conseils

Wikipedia a, à mon avis biaisé, un writeup décent sur le rang, et ce que cela signifie dans le contexte des différentes parties de « la parole » dans J.

Mais pour répondre à la question initiale, l'installation de trace de J peut être utile pour comprendre comment fonctionne la grammaire:

   require'trace'
   trace '1 2 +/@{ i.4'

Cela vous guidera pas à pas à travers le processus d'analyse syntaxique, montrant les mots consommée par chaque règle de production et le résultat génèrent chacun.

Ah, je pense que je l'ai pensé à elle, je dois utiliser @: au lieu de @

   1 2 +/@:{ i.4
3

qui est ce que je voulais. Je suppose que je vais devoir lire un peu plus sur le classement, qui est la seule différence entre @ et @:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top