Избегайте повторения названия глагола в поезде

Рассмотрим диадический глагол g, определенный в терминах диадического глагола f:

g=. [ f&.|: f

Можно ли переписать g так, чтобы термин f появлялся только один раз, но поведение не изменилось?

ОБНОВЛЕНИЕ: локальный контекст

Этот вопрос возник как часть моего решения этой проблемы, которое «расширяет» матрицу в в обоих направлениях так:

Исходная матрица

1 2 3
4 5 6
7 8 9

Расширенная матрица

1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
1 1 1 1 2 3 3 3 3
4 4 4 4 5 6 6 6 6
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9
7 7 7 7 8 9 9 9 9

Мое решение заключалось в том, чтобы сначала развернуть строки матрицы, используя:

f=. ([ # ,:@{.@]) , ] , [ # ,:@{:@]

А затем применить то же решение при транспонировании, чтобы развернуть столбцы уже развернутой по строкам матрицы:

3 ([ f&.|: f) m

И я заметил, что невозможно написать свое решение, сделав временный глагол f или повторив его определение встроенным ...


person Jonah    schedule 22.10.2017    source источник
comment
Боб прав в общем случае. Если вы предоставите нам более подробную информацию и контекст по вашему конкретному делу, возможно, найдется решение на местном уровне.   -  person Dan Bron    schedule 23.10.2017
comment
@DanBron Спасибо. Я обновил пост.   -  person Jonah    schedule 23.10.2017


Ответы (2)


Помогает знание контекста. Вы также можете подойти к этому с помощью (|:@f)^:(+: x) y. Молчаливое (и принятое в гольф) решение было бы 0&(|:{.,],{:)~+:.

   (>: i. 3 3) (0&(|:{.,],{:)~+:) 2
1 1 1 2 3 3 3
1 1 1 2 3 3 3
1 1 1 2 3 3 3
4 4 4 5 6 6 6
7 7 7 8 9 9 9
7 7 7 8 9 9 9
7 7 7 8 9 9 9
person miles    schedule 24.10.2017
comment
это решение в гольф прекрасно, но я не могу понять, как вы соотносили его с мощным решением. Он анализирует вот так, что означает, что он эквивалентен 4 (0&(|:{.,],{:)) m, но поскольку 0 уже связан как левый аргумент Что касается глагола справа, я не понимаю, где 4 вступает в игру и как она дает конечный результат. - person Jonah; 24.10.2017
comment
@Jonah Пусть m - это матрица, а n - количество раз, которое матрица расширяется. Разбивка для этого: от m (0&(|:{.,],{:)~+:) n до m 0&(|:{.,],{:)~ (+: n) до от (+: n) 0&(|:{.,],{:) m до (0&(|:{.,],{:))^:(+: n) m - person miles; 24.10.2017
comment
имеет смысл до самого последнего шага: какое правило там применяется? - person Jonah; 24.10.2017
comment
@Jonah Это еще одно правило для связи &, где существительное связано с диадой, а затем называется диадически. Например, x m&f y становится m&f^:x y - person miles; 24.10.2017
comment
ах, хорошо, в этом есть смысл, я думаю, на самом деле я не знал об этом или, по крайней мере, полностью забыл об этом. отличное решение. вы должны опубликовать это. - person Jonah; 24.10.2017

Я не думаю, что это возможно. Правая стойка будет результатом x f y, а левая стойка - x. Средняя стойка будет транспонирована и применена f к аргументам, а затем транспонирует результат обратно. Если вы выберете правую f, тогда не удастся получить x f y, а если убрать средний f, тогда у вас не будет f, примененного к транспонированию.

Я предполагаю, что вы ищете примитив, который даст тот же результат всего лишь с одним упоминанием f, но я не знаю ни одного.

Зная J-сообщество, кто-то докажет, что я ошибаюсь!

person bob    schedule 23.10.2017