Использование аргумента: ti =. {. (* I.)} - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь обернуться J. Во введении easy-j.pdf (доступно здесь ; стр. 19) есть этот хук:

ti=.{.(*i.)}.     NB. ti=times index generator
ti 2 5            NB. Usage

Я понимаю предыдущий термин: 2(*i.)5 NB. 2 times 0 1 2 3 4

Я могу понять / представить, что }. берет последний элемент из списка аргументов (выше 2 5) для создания (*i.)5. Но что делает ясным / очевидным, что каким-то образом список аргументов также передается в {. для получения 2 (в моем текущем понимании аргумент уже используется }.)?

Надеюсь, этот вопрос понятен J экспертам.

1 Ответ

0 голосов
/ 06 сентября 2018

ti на самом деле является монадической вилкой с тремя зубцами, которые являются глаголами. Способ выполнения этого состоит в том, что два внешних зубца {. и }. выполняются для аргумента 2 5, и результат подается как левый, а правый аргумент среднего зубца (* i.), который сам по себе является крюк.

В J операции fork часто обозначаются символами f, g и h, обозначающими глаголы, и x и y, представляющими левый и правый аргументы и вилки, оцениваются следующим образом:

(f h g) y <-> (f y) h (g y) NB. <-> is a meta symbol for equivalency - not J symbols

В этом случае f y равен {. 2 5, а g y равен }. 2 5

  {. 2 5
2
   }. 2 5
5

Средний зубец вилки всегда диадичен, потому что он подается от двух внешних зубцов, а конструкция для диадического крюка (* i.) в центре равна

x (f g) y <-> x f (g y)


   2 (* i.) 5  NB. 2 * (i. 5)
0 2 4 6 8
...