Pregunta

Me estoy empezando a tratar de recoger el lenguaje J, y estoy confundido por lo siguiente:

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

cuando en la documentación para @ dice: "x u @ v y u ↔ x v y"

Asumo Sólo estoy confundiendo una parte de la oración para otro, pero no puedo entenderlo

También, ¿cómo le digo qué tipo de palabra es un nombre?

¿Fue útil?

Solución

   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'
[: +/ {

Otros consejos

Wikipedia tiene, en mi opinión sesgada, una valoración crítica decente en el rango, y lo que significa en el contexto de las diferentes partes de "libertad de expresión" en J.

Pero para responder a la pregunta original, recurso de rastreo de J puede ser útil para entender cómo funciona su gramática:

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

Esto le llevará paso a paso por el proceso de análisis, que muestra las palabras siendo consumida por cada regla de producción y el resultado de cada genera.

Ah, creo que pude haber dado cuenta, necesito usar @: en lugar de @

   1 2 +/@:{ i.4
3

que es lo que quería. Supongo que voy a tener que leer un poco más en el rango, que es la única diferencia entre @ y @:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top