Что представляет собой совместимую форму аргументов массива с J-глаголами?

Я сейчас изучаю (и схожу с ума) J и читаю Learning J. Я заметил, что многие (все?) глаголы, которые я изучал, довольно гибки в своих аргументах. Я могу сделать традиционный 4 - 2 или использовать его со списками, например. 4 5 - 3 4, и даже может сделать 3 4 5 - 1, который, кажется, "продвигает" правую часть оператора до массива, хотя я только что дал ему скаляр.

Я предполагаю, что последнее поведение описывается этой строкой из гл. 2 вышеупомянутого текста:

Следовательно, два аргумента = должны иметь одинаковые формы (или, по крайней мере, как в примере с Y=2, совместимые формы). В противном случае возникает ошибка.

Действительно, 3 4 5 - 2 3 — ошибка. Каково техническое определение «совместимой формы»? Это так же просто, как «та же форма или скаляр», или это нечто большее?


person J Cooper    schedule 11.01.2012    source источник


Ответы (1)


Со страницы словаря B. Глаголы :

Соглашение. Во фразе p v q аргументы v должны быть согласованы в том смысле, что один кадр должен быть префиксом другого.

Итак, все следующее будет работать

  (i. 2 3) * (i. 2 3 4)     NB. frame of left arg is prefix of the right arg
  (i. 2) * (i. 2 3 4)       NB. frame of left arg is prefix of the right arg
  (i. 2 3 4) * (i. 2 3)     NB. frame of right arg is prefix of the left arg

Формальное определение frame см. на странице словаря A. Существительные

Я бы порекомендовал этот раздел J для программистов на C в качестве тщательное освещение этих понятий.

person Tikkanz    schedule 11.01.2012