Вопрос

Я только начинаю пытаться освоить язык J, и меня смущает следующее:

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

когда в документации для @ говорится:"x u@v y ↔ u x v y"

Я предполагаю, что просто путаю одну часть речи с другой, но не могу в этом разобраться

кроме того, как мне определить, к какому типу речи относится имя?

Это было полезно?

Решение

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

Другие советы

В Википедии, по моему предвзятому мнению, есть приличная статья о ранге и о том, что это означает в контексте различных частей "речи" в J.

Но чтобы ответить на первоначальный вопрос, средство трассировки J может быть полезно для понимания того, как работает его грамматика:

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

Это проведет вас шаг за шагом через процесс синтаксического анализа, показывая слова, используемые каждым производственным правилом, и результат, который генерирует каждое из них.

Ах, я думаю, что, возможно, я уже понял это, мне нужно использовать @:вместо того, чтобы @

   1 2 +/@:{ i.4
3

именно этого я и хотел.Думаю, мне придется еще немного почитать о ранге, который является единственной разницей между @ и @:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top